LINUX.ORG.RU
ФорумTalks

Код-инжекшены в убогом питон

 , ,


1

4

да выбрасывает ексепшен, но выброс ексепшена == борьба со следствиями, а именно с кодинжекшеном.

>>> class Foo():
...     def __init__(self, **kw):
...             print(kw)
... 
>>> d = {'self': 'abc', 'a': 1, 'b': 2}
>>> 
>>> Foo(**d)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() got multiple values for argument 'self'

Ща адепты мне расскажут что так делать нельзя.

Типа в шаблон jinja нельзя передавать self. Придумайте новое имя. Ага.

Для специалистов: если атаковать не первый параметр (self), а скажем опциональный, то будет весело:

>>> class Foo():
...     def __init__(self, a=None, **kw):
...             print('a=', a, kw)
... 
>>> d = {'self1': 'abc', 'a': 1, 'b': 2}
>>> 
>>> Foo(**d)
a= 1 {'self1': 'abc', 'b': 2}
<__main__.Foo object at 0x7f9a14ec5a58>
>>>
★★

Последнее исправление: rsync (всего исправлений: 1)

Ответ на: комментарий от rsync

Всем «перлофилам» свойственно чувство красоты.

Скорее, современного искусства.

oldstable
()
Ответ на: комментарий от dem

Неадеватные люди творят неадекватную херню. Единственное неадекватное из сотворённого им, что мне известно, это синтаксис лимбо. У мужика лишь немного своеобразный вкус, но он абсолютно адекватен.

WitcherGeralt ★★
()

Вообще какой-то эталонная, недостижимая для простых людей степень неосиляторства.

oldstable
()
Ответ на: комментарий от pawnhearts

В стандарной библиотеке парсер на питоне с расширениями на сишечке, вроде, их можно не юзать, можно даже взять одну и ту же версию simplejson бед расширений и тестить на всех платфомах. Впрочем, да, идея так себе, ибо чёрт знает чего там в пыхе. Но я всё равно начну с json, ибо это одна из самых распространенных задач.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от WitcherGeralt

В пыхе JSON подкапотный, сишный, причем, он даже быстрее самогО пыхового (un-)serialize().

deep-purple ★★★★★
()
Ответ на: комментарий от bread

джанга обитает на дне океана

кто бы сомневался. Меня больше удивляет, что Sanic там же. По ждругим тестам, что я видел, он должен быть где-то рядом с Falcon (обрати внимание). Так что у меня большие сомнения на счёт релевантности этого теста.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Есть еще techempower, но там совсем графики от балды, такое впечатление.

bread
()
Ответ на: комментарий от deep-purple

Так слои могут так наслоить, что никакой ЯП не вытянет. А пишут то все на слоях, даже пхпшники.

bread
()
Ответ на: комментарий от WitcherGeralt

В джанге просто куча всего из коробки и оно включено по-дефолту. Если все поотрубать она будет очень быстро работать. И наоборот, если ты пишешь что-то сложнее hello-world на микрофреймворке, начитаешь переизобретать ту же джангу, только оно с большой вероятностью будет еще медленнее.

pawnhearts ★★★★★
()
Ответ на: комментарий от deep-purple

Если добавить тайп хинтинг то можно mypyc заюзать.

pawnhearts ★★★★★
()
Ответ на: комментарий от deep-purple

сеттигн пропертей

И с чем это сравнивать? В пхп вообще подобное есть?

тайп хинтинг

Никак не повлияет же.

Кстати вот готовое, как понимаю это CPython: https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/php.html

Сел за комп, сейчас что-нибудь попробую.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

сеттигн пропертей в пхп подобное есть?

Есть, даже динамический, хошь через сеттеры хош напрямую.

тайп хинтинг никак не повлияет же

Возможно.

вот готовое

Ну вот, а ты говорил. Но это с третим, он, я слышал, разжирел?

deep-purple ★★★★★
()
Ответ на: комментарий от bread

Предположим, что так.

Так вот что я вам скажу я преподавал и Я выбираю какой ЯП я буду преподавать. Какое вы имеете право мне это диктовать?

dem ★★
()
Ответ на: комментарий от deep-purple

Вот кстати про абасракции. Есть две микрофигни на рубях: sinatra и roda. Казалось бы, что там можно ускорить, но рода в разы шустрее и памяти жрет сильно меньше. Вот так, а можно ныть что руби днище и выкидывать деньги на миграцию в сиго, хотя надо было всего-то руки подровнять. Так что и питон наверно может кочегарить не хуже пыха, просто все застряли на джанге/фласке.

bread
()
Ответ на: комментарий от dem

Ну джанга... Нашли что вспомнить..

Ну рыночек порешал. Может лет через 10 и закопают, а пока только джанга, редко фласк.

bread
()
Ответ на: комментарий от deep-purple

Возможно, но я думал тоньше синатры трудно придумать. Но в недоязычке всегда можно уронить производительность парой строчек.

bread
()
Ответ на: комментарий от deep-purple

Порядок такой: загружаются в память 10 файлов, потом в цикле файлы парсятся, данные изменяются и снова дампятся.

Код постарался сделать идентичным. Посмотреть здесь: python, php, файлики для теста.

Версии

# php --version
PHP 7.2.10-0ubuntu0.18.04.1 (cli) (built: Sep 13 2018 13:45:02) ( NTS )

# python --version
Python 2.7.15rc1

# python3 --version
Python 3.6.7

# pypy --version
Python 2.7.13 (5.10.0+dfsg-3build2, Feb 06 2018, 18:37:50)
[PyPy 5.10.0 with GCC 7.3.0]

# pypy3 --version
Python 3.5.3 (928a4f70d3de, Feb 08 2019, 10:42:58)
[PyPy 7.0.0 with GCC 6.2.0 20160901]

Файлы по 17мб

# php test.php 1
1 iterations: 2.1008348464966

Стандартный модуль json

# default=1 python test.py 1
1 iterations: 7.201549

# default=1 python3 test.py 1
1 iterations: 4.738424

# default=1 pypy test.py 1
1 iterations: 3.468021

# default=1 pypy3 test.py 1
1 iterations: 4.050927

simpleson без сишных расширений

# python test.py 1
1 iterations: 66.277460

# python3 test.py 1
1 iterations: 59.277255

# pypy test.py 1
1 iterations: 19.619203

# pypy3 test.py 1
1 iterations: 23.371518

Файлы по 12-20кб

# php test.php 1000
1000 iterations: 1.631049156189

# default=1 python test.py 1000
1000 iterations: 5.591971

# default=1 python3 test.py 1000
1000 iterations: 3.937951

# default=1 pypy test.py 1000
1000 iterations: 3.923095

# default=1 pypy3 test.py 1000
1000 iterations: 4.395302
WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

В общем, пипи может ускорить дичь, которую почему-то не вынесли в сишный модуль, а так толку мало.

bread
()
Ответ на: комментарий от WitcherGeralt

Я тут приболел. Есть пара мыслишек. Полегче станет - запилю

deep-purple ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.