Вход | Регистрация

  1  2  3   

Почему язык Python такой популярный?

Почему язык Python такой популярный?
Я
   megabax
 
31.10.16 - 21:22
Добрый день. Я тут начала изучать Python, и, если честно, был сильно удивлён некоторыми фактами. Во-первых, этот язык интерпретируемый и работает медленно. Во-вторых, в нем нестрогая динамическая типизация, то есть, мало того что не обязательно предварительно объявить переменную, так он еще и может менять свой тип по ходу работы программы, и, более того, если мы обратимся к несуществующему полю объекта, то мы получим вовсе не исключительную ситуацию, а просто создадим это поле. То есть, с ООП там, если грубо говорить, немножко бардак.
Но тем не менее, почему то Python очень популярный, им пользуется Яндекс, Гугл, на нем написано много разные программ, а многие серьёзные компании в своих вакансиях предъявляют требование обязательного знания Python.
Дык почему Python так популярен? Что в нем такого крутого, что, несмотря на очевидные недостатки, делает его таким популярным?
 
 
   CodeFinder
 
101 - 01.11.16 - 10:11
(91) а что в нем тебе не нравится? Т.е для тебя скрипт бэкапа лукчше писать на питоне чем на баше? мдаа...а может на 1с сразу же?
   megabax
 
102 - 01.11.16 - 10:12
(100) Да ну нафиг этот js. После него у меня до сих пор неприятная отрыжка. Лучше уж питон: Все таки, если закрыть глаза на динамическую типизации, то хороший получается язык.
   Asmody
 
103 - 01.11.16 - 10:13
(100) Пфф!
   Кирпич
 
104 - 01.11.16 - 10:14
(101) на 1с уже давно пишут http://oscript.io/
   Govnokoder
 
105 - 01.11.16 - 10:15
Ох уж эти энтузиасты
   megabax
 
106 - 01.11.16 - 10:15
(104) Блин, извращение какое-то. Зачем нужно еще один скриптовый язык создавать, когда их итак навалом?
   Кирпич
 
107 - 01.11.16 - 10:18
(106) Ну в нашей стране полно программистов, которые кроме КонецЕсли ничего не знают. Опять же фирменный стиль. Некоторые даже скажут, что это импортозамещение :)
   Govnokoder
 
108 - 01.11.16 - 10:19
Объявление: "Программистка-индивидуалка. Выезд, апартаменты. Классика, реверс-инжениринг, глубокий кодинг без ТЗ. Звони! Есть подруга бизнес-аналитик".
   Кирпич
 
109 - 01.11.16 - 10:20
(106) да и красивый код на русском языке, если к 1c через Ole подключаться.
   Govnokoder
 
110 - 01.11.16 - 10:20
ПрограммистГуманитарий
 
 Рекламное место пустует
   NikVars
 
111 - 01.11.16 - 10:20
(106) Вот тебе другия "извращения"
:)
https://toster.ru/q/51646
"Из недавнего.. делал перенос данных из 1С 7.7 в Oracle JD Edwards. Самый быстрый инструмент для этого оказался опять же питон."
Или это
Аналог внешней компоненты на Python для 8-ки
http://catalog.mista.ru/public/190166/
   CodeFinder
 
112 - 01.11.16 - 10:36
Кстати Python больше всего требуется в веб
   megabax
 
113 - 01.11.16 - 10:40
(111) Внешняя компонента на питоне - не такое уж и извращение, если так подумать. Но вот одинэсоподобный скриптовый язык.... действительное, наверное только для тех, кто кроме "концаесли" ничего не знает
   Мойдодыр
 
114 - 01.11.16 - 10:42
   Кирпич
 
115 - 01.11.16 - 10:46
(113) "Внешняя компонента на питоне - не такое уж и извращение" - а по моему, это полный треш и питон головного мозга. А вот одинэсоподобный скриптовый язык это вполне логичная приблуда к 1с.
   CodeFinder
 
116 - 01.11.16 - 10:47
Вообще python не особо популярен.
Лучше бы тему подняли. Почему java настолько популярна?
   Мойдодыр
 
117 - 01.11.16 - 10:47
(116) такую тему 100500 раз поднимали
   Кирпич
 
118 - 01.11.16 - 10:47
+(115) потому что любой одинесник поймет чо там в этом скрипте понаписано
   Serginio1
 
119 - 01.11.16 - 10:51
(116) А кто тебе мешает? Только так или иначе здесь мало квалифицированных программистов на Java или том же питоне.
   Naf_kultura
 
120 - 01.11.16 - 11:12
оффтоп, зачем 1С снова переходит к созданию объектов, указывая тип через строковые литералы:

Форма = ПолучитьФорму("Справочник.Валюты.Форма.ФормаЭлемента");

почему-то вспомнилось 7.7:

СЗ = СоздатьОбъект("СписокЗначений");
   Мойдодыр
 
121 - 01.11.16 - 11:15
(120) чтоб в веб клиенте проще было в js компилить
   Loky9
 
122 - 01.11.16 - 11:18
(116) $$$ * 86%
   shulerr
 
123 - 01.11.16 - 11:25
(101) прикинь!
Я там наверху писал про if [[ a -eq b ]] ... Инопланетянские конструкции какие-то. Python же на интуитивном уровне понятен. Для сервачных скриптов - незаменимая вещь.
   CodeFinder
 
124 - 01.11.16 - 11:26
(123) мдааааа...бэкап на баше можно написать в 3-4 строчки. на питоне?
   shulerr
 
125 - 01.11.16 - 11:27
В две, раз пошла такая пьянка. Ты количеством строк измеряешь качество?
   CodeFinder
 
126 - 01.11.16 - 11:32
(125) и это тоже.
   Loky9
 
127 - 01.11.16 - 11:47
При подключении флешек к хосту сканировать их содержимое, по определённой схеме копировать нужное на диск, ставить на флешке отметку обработки, распарсить полученное, переслать на удалённый хост. При сбоях информацию не терять.
Напишите на баше.
   Сильф
 
128 - 01.11.16 - 11:53
(0) > в нем нестрогая динамическая типизация, то есть, мало того что не обязательно предварительно объявить переменную, так он еще и может менять свой тип по ходу работы программы

Какой ужас! А в 1Се не так, что ли? :)
   shulerr
 
129 - 01.11.16 - 12:10
(127) + или на java, подняв предварительно openjdk или как его там. Или на c#, загнав на сервер тонну библиотек. При этом все равно придется вызывать bash'евые инструкции, обернув их вызовами своего языка. Потратить на это надо кучу времени, напрячь админов..
   Мойдодыр
 
130 - 01.11.16 - 12:12
(128) в 1с не так. а вот в js тоже так же
   Мойдодыр
 
131 - 01.11.16 - 12:12
х = Новый Структура;
x.x = 1 // тут будет ошибка
   Pentosh
 
132 - 01.11.16 - 12:20
(128) замечу что в питоне СТРОГАЯ (читать как сильная)  динамическая типизация.

й = "строка" + 1 - даст ошибку
   shulerr
 
133 - 01.11.16 - 12:33
Зато й = "строка" * 2 не дает))
 
 
   Yrii-ay
 
134 - 01.11.16 - 12:41
Советы программисту:
Отношения с заказчиком станут менее формальными, если программа начисления зарплаты вместо 'ИТОГО' будет печатать 'ИГОГО'.
   Кирпич
 
135 - 01.11.16 - 12:45
(134) а если сумма по зарплате превышает плановую, то ОГОГО
   LeReve
 
136 - 01.11.16 - 12:52
(119) Здесь в принципе мало квалифицированных программистов.
   sapphire
 
137 - 01.11.16 - 13:02
(0) Потому, что пистон легко поддерживать, парадигма, обратная перлу, "это можно сделать только так и больше никак".
   Loky9
 
138 - 01.11.16 - 13:08
(133) Чисто по здравому смыслу и не должно)
   Web00001
 
139 - 01.11.16 - 13:10
(0)Отличная штука, я на нем 1Спастебин сначала написал, потом нормально на flask переписал. Очень годная штука этот самый flask. Да и в остальном писать очень приятно, много удобных фишек.
   Кирпич
 
140 - 01.11.16 - 13:25
Чота я думал, что питон быстрее. У меня есть такая придурь - я пишу быстрый интерпретатор языка 1с. Типа хобби такое. Пишу несколько лет, в основном осенью :) Щас откопал свой этот интерпретатор и там набит тестовый код

перем результат;
D=0;
for i=1 to 100000000 do
d = d + 100.25;
enddo;
результат=d;

набил такое в питоне
import time
print "start..."
t1 = time.time()
z = 0.00
for index in range(100000000):
    z += 100.25
t2 = time.time()
print "end."
print z
print t2-t1

питон выполнил за 16 секунд
моё поделие за 3 секунды
OneScript думал 2 минуты

от это я дал :))
   Кирпич
 
141 - 01.11.16 - 13:27
мож там числа какие нибудь сильно умные. типа как в 1с
   Loky9
 
142 - 01.11.16 - 13:41
(140)
pypy.exe tmp.py
start...
end.
10025000000.0
1.10899996758

Но подглючивает, гад.
   Кирпич
 
143 - 01.11.16 - 13:52
(142) так веселее. ага. у меня даже 0.33333 выдало
   Кирпич
 
144 - 01.11.16 - 13:54
так что на эту осень есть чем заняться
   Loky9
 
145 - 01.11.16 - 13:54
С заменой на xrange CPython у меня отработал за 17 с половиной сек.
   Serginio1
 
146 - 01.11.16 - 13:57
(144) Угу сразу в байт код компилируй.
   Кирпич
 
147 - 01.11.16 - 14:09
видимо этот pypy понял, что переменная z имеет только значение double и зафигачил сразу код для double, а у меня каждый раз проверяет тип переменной. от того и тормоза
   Serginio1
 
148 - 01.11.16 - 14:43
Да потому, что компилирует.
for i=1 to 100000000 do
d = d + 100.25;
enddo;

Аналогично поступает компилятор и для dynamic в .Net
   CodeFinder
 
149 - 01.11.16 - 16:38
(127) легко. я парсер зарубежного интернет магазина делал на баше, который потом импортировал всю номенклатуру в мой интернет магазин зеркало.
 
 Рекламное место пустует
   Мойдодыр
 
150 - 01.11.16 - 16:44
(149) парсинг с помощью регулярок?
   CodeFinder
 
151 - 01.11.16 - 16:46
(150) да
   Кирпич
 
152 - 01.11.16 - 16:53
(148) dynamic в .Net показал результат медленнее, чем pypy в четыре раза
   Serginio1
 
153 - 01.11.16 - 17:01
(152) А в режиме release компилировал и с прогревом на компиляцию?
   Кирпич
 
154 - 01.11.16 - 17:01
+(152) а если уж совсем по честному написать так
for (dynamic x = 0; x < 100000000; x++)

то чуть меньше трёх секунд. как в моей поделке :))

так что "Аналогично поступает компилятор и для dynamic в .Net" - бряхня
   Кирпич
 
155 - 01.11.16 - 17:02
(153) в режиме release
   Serginio1
 
156 - 01.11.16 - 17:41
(154) Аналогично поступает делает класс с методом
Для x++ вызывается типизированный метод. Понятно, что незаинлайненный метод будет выполняться долше.
   Serginio1
 
157 - 01.11.16 - 17:42
В .Net же все компилируется
   Gary417
 
158 - 01.11.16 - 17:43
(157) компилируется во что? в Native?
   Serginio1
 
159 - 01.11.16 - 17:45
(158) JIT компилятор компилирует в натив в реалтайме.
   Serginio1
 
160 - 01.11.16 - 17:48
   Кирпич
 
161 - 01.11.16 - 17:53
(156) если аналогично, то почему разница в 100 раз?
   Serginio1
 
162 - 01.11.16 - 17:56
(161) Ну не совсем аналогично. Во первых создается Expression и компилируется в  делегат и на каждом шаге сравнивается с типом.
Задержки на вызов делегата и сравнение с типом делегата в кэше
   Serginio1
 
163 - 01.11.16 - 17:58
По ссылке

Для описания логики работы DLR приведу ответ Эрика Липперта по этому поводу (вольный перевод):


Сначала среда выполнения решает с объектом какого типа мы имеем дело (COM, POCO).

Далее в дело вступает компилятор. Так как необходимость в лексере и парсере отсутствует, DLR использует специальную версию компилятора C#, имеющего только анализатор метаданных, семантический анализатор выражений, а также генератор кода, который вместо IL генерирует Expression Trees.

Анализатор метаданных использует рефлексию, чтобы установить тип объекта, который потом передается семантическому анализатору для установления возможности вызова метода или выполнения операции. Далее происходит построение Expression Tree, как если бы Вы использовали лямбда-выражение.

Компилятор C# возвращает обратно дерево выражений в DLR вместе с политикой кэширования. DLR потом сохраняет данный делегат в кэше, ассоциирующимся с узлом вызовов.


Для этого используется свойство Update класса CallSite. При вызове динамической операции, хранящейся в поле Target происходит перенаправление к свойству Update, где и происходит вызов байндеров. Когда в следующий раз произойдет вызов, вместо повторного выполнения вышеперечисленных действий, будет использоваться уже готовый делегат.


Polymorphic Inline Cache

Производительность динамических языков страдает из-за дополнительных проверок и поисковых запросов, выполняющихся во всех местах вызова. Прямолинейная реализация постоянно ищет члены в списках приоритета класса и, возможно, разрешает перегрузку типов аргументов метода каждый раз, когда исполняется строчка кода. В языках со статической типизацией (или с достаточным количеством указаний типов в коде и выводом типов) можно генерировать инструкции или вызовы функций среды исполнения, которые подходят для всех точек вызова. Это возможно, потому что статические типы позволяют узнать все, что нужно, во время компиляции.

На практике повторные операции над одними и теми же типами объектов можно привести к общему типу. Например, при первом вычислении значения выражения x + y для целых x и y можно запомнить фрагмент кода или точную функцию времени исполнения, которая складывает два целых числа. Тогда при всех последующих вычислениях значения этого выражения искать функцию или фрагмент кода уже не потребуется благодаря кэшу.

Вышеприведенный механизм кэширования делегатов (в данном случае), когда узел вызова является самообучающимся и обновляющимся называется Polymorphic Inline Cache. Почему?
   Serginio1
 
164 - 01.11.16 - 17:59
Кстати посмотри через ILSpy какой код сгенерировал компилятор
   Кирпич
 
165 - 01.11.16 - 18:00
(162) проще говоря, нет оптимизации типа dynamic
   Serginio1
 
166 - 01.11.16 - 18:01
(165) Читай 163
   Кирпич
 
167 - 01.11.16 - 19:09
(166) почитал. Нафиг я это читал? Pypy делает быстро, .net медленно.
   spock
 
168 - 01.11.16 - 19:10
(140) примеры не одинаковые. Range выделяет весь массив в памяти, а потом итерирует по нему. Замени на xrange чтоли.
   Кирпич
 
169 - 01.11.16 - 19:40
(168) чота я не заметил, как выделяется полгига памяти под массив
   Serginio1
 
170 - 01.11.16 - 19:50
(167) Угу у тебя пример того, что никогда не возникает в жизни ни разу.

В реальной жизни приходится работать с утиной типизацией то есть с объектами неизвестного типа, но имеющие определенную сигнатуру методов и их название. Например COM, ExpandoObject (аналог структура) DynamicObject (нет аналога) и объекты неизвестного типа

Для COM и обычных объектов можно использовать Reflection.
Так во dynamic быстрее Reflection раз в 13-30

http://stackoverflow.com/questions/13193799/performance-cost-of-using-dynamic-typing-in-net

И при этом вызов по сигнатуре. Для интереса проведи тест для установки свойства, вызова метода с не dynamic параметрами.
   Serginio1
 
171 - 01.11.16 - 19:52
Кстати можно и IronPython попробовать. Там как раз все на DLR
   Serginio1
 
172 - 01.11.16 - 19:53
Кстати хорошая презентация про то как работает DLR http://www.slideshare.net/yu5k3/dlr-54012646
   Кирпич
 
173 - 01.11.16 - 20:20
(170) "Угу у тебя пример того, что никогда не возникает в жизни ни разу."
Ну в .NET я конечно не стану какие нибудь гигантские матрицы на dynamic считать, а на PyPy получается можно.
Я просто подумал, что компилятор NET такой же умный как PyPy. Оказалось нет. Ну и пофиг.
   Loky9
 
174 - 01.11.16 - 20:26
(171) Он тормозней цэпитона раз в десять.
Нашел такую штуку: http://numba.pydata.org/
Это даже круче pypy!
   Loky9
 
175 - 01.11.16 - 20:30
(149) Нужно было разобрать xml в архивах, но разбор был не самой большой проблемой в задаче.
На баше это сделать можно, но неудобно, громоздко и плохосопровождаемо.
   Jija Grenkov
 
176 - 01.11.16 - 22:30
Пайтон часто используется как вспомогательный язык. На пример как замена bash скриптов. На Пайтон часто пишут вспомогательные утилиты не требовательным к производительности. Так же Пайтон широко используется при анализе данных, но если данных много то на Пайтоне делают только прототипы, а основную реализацию на jvm языках. Производительность Пайтон скриптов никогда не была высокой
   Jija Grenkov
 
177 - 01.11.16 - 22:32
В разработке классических приложений Пайтон не слишком популярен
   Loky9
 
178 - 01.11.16 - 23:05
»
   Loky9
 
179 - 01.11.16 - 23:07
"а основную реализацию на jvm языках"
Больше неначем...
   Jija Grenkov
 
180 - 02.11.16 - 00:31
(178) да такой пример и на 1с не сложно llvm байт код интерпретировать. Вот только я не слышал о больших приложениях на этой виртуальной машине.
(179) таковы реалии.
   Tarzan_Pasha
 
181 - 02.11.16 - 05:57
да не такой уж он популярный. Ну на питоне всякие парсеры пишут, насколько мне известно и некий хакерский софт.
   DDwe
 
182 - 02.11.16 - 06:20
(181) Паша как всегда всякую хрень пишет.
   spock
 
183 - 02.11.16 - 06:21
(169) python3 чтоли?
   Loky9
 
184 - 02.11.16 - 08:04
(180) "Вот только я не слышал о больших приложениях на этой виртуальной машине."
Эпл использует llvm в графической подсистеме макоси. BSD собирается clang. https://wiki.freebsd.org/BuildingFreeBSDWithClang
(183) pypy не выделяет память в такой ситуации.
   kihor
 
185 - 02.11.16 - 18:44
(0) Не знаю, не знаю насчет этого Питона. Вот перед мной встала задача написать скрипт, который бы парсил неструктурированный Ексель-файл и готовил CSV-файл для загрузки в базу. Решил, что Питон это модно и начал писать на нем. Несколько дней я промучался с кодировками. Все время были какие-то проблемы с преобразованием символов при записи в файл. Плюнул я на это дело и написал скрипт за пару часов на Перле. Признаю, что наверное я просто плохо знаю Питон, но в моем случае это было так. Не понимаю почему Питон так потеснил в популярности Перл. Наверное просто мода такая.
   kihor
 
186 - 02.11.16 - 18:46
(185)+ Или еще пример. Надо было мне написать скрипт, который бы обращался по https ссылке и при помощи PKCS12 сертификата скачивал бы информацию. Долго читал доки и как я понял Питон не позволяет это делать. На Перл это делается "на ура".
   Loky9
 
187 - 02.11.16 - 19:12
(185) Регулярно пиходится разбирать питоном xls и xlsx. Не имею никаких проблем. С dbf тоже.
(186) Может быть проблема решается
openssl pkcs12 -in filename.p12 -nokeys -out certificate.pem
openssl pkcs12 -in filename.p12 -nocerts -out privkey.pem
?
   spleen
 
188 - 02.11.16 - 19:16
1. Порог вхождения низкий.
2. Кроссплатформенный
3. На нем написан популярный web фреймворк Django. Хотя на этом фреймворке вся популярность в web заканчивается.

4. В научной среде много его используют. Есть библиотека NumPy. Часто это не совсем программисты, а ученные которым надо написать не сложные программы по анализу и тд. Тут как раз динамическая типизация большой плюс.

5. Хороший язык для обучения программированию.
6. Опять же, Raspberry pi
7. Много уже готовых написанных библиотек.
8. Хорошее сообщество.
9. Скриптовый язык. В системном администрировании тоже очень популярен. Потому как почти во всех дистрибутивах Linux предустановлен.
   kihor
 
189 - 02.11.16 - 19:18
(187) Да, решение с openssl я также нашел, но не хотелось заставлять клиентов кроме возни с PKCS12 сертификатом заставлять еще возиться с их преобразованием. Поэтому я решил распространять скрипт на Перле для своего сервиса.
   Loky9
 
190 - 02.11.16 - 19:26
(189) from OpenSSL import crypto
p12 = crypto.load_pkcs12(file("push.p12", 'rb').read(), [password])

# PEM formatted private key
print crypto.dump_privatekey(crypto.FILETYPE_PEM, p12.get_privatekey())

# PEM formatted certificate
print crypto.dump_certificate(crypto.FILETYPE_PEM, p12.get_certificate())
   kihor
 
191 - 03.11.16 - 01:13
(190) Спасибо. Я не находил раньше такого.
В целом, единственный случай когда у меня Питон "победил" Перл - это чтение списков Sharepoint. У варианта на Перл были какие-то глюки с авторизацией, а вариант на Питон заработал без проблем.
   Balabass
 
192 - 03.11.16 - 02:03
Разработка ПО.
Оставлю это здесь: https://www.youtube.com/watch?v=4UhESx6vK4c
   EvilBeaver
 
193 - 09.11.16 - 11:25
(163) Встроить DLR в 1script я думал, но как-то закопался в документации и исходниках IronPython. Не уверен, что овчинка стоит выделки.
   Gary417
 
194 - 09.11.16 - 11:26
(188) <Опять же, Raspberry pi >

А что распберри? я на яве для неё пишу
   EvilBeaver
 
195 - 09.11.16 - 11:28
(140) вот выполнение вашего примера на 1script 1.0.15.

38 секунд. Откуда 3 минуты взялось?

https://s21.postimg.org/lfrm47e1j/2016_11_09_11_26_26.png
   Rovan
 
196 - 09.11.16 - 12:46
(0) в Lotus Notes не лучше
метод AddItemValue создает поле в документе
а чтобы получить знание поля надо его найти
GetFirstItem()
Все поля являются сразу массивами.
Нет понятия "тип документа".
Есть просто поле Form, по значению которого система понимает в какой форме его открывать.
   Кирпич
 
197 - 29.11.16 - 22:51
(195) и правда. может ком чота считал во время теста. ну вот на ноуте старом померил сейчас.
https://postimg.org/image/4i46fnx21/

моё 5 сек
python 24 сек
onescript минута
   Garykom
 
198 - 29.11.16 - 23:01
(197) А ты повторно то запусти... причем сразу же после 1-го теста ))
   Кирпич
 
199 - 29.11.16 - 23:03
(198) да запускал раз пять
   Кирпич
 
200 - 29.11.16 - 23:06
+(199) может другая версия была. сейчас то последнюю качнул
  1  2  3   

Список тем форума
Рекламное место пустует  Рекламное место пустует
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует