Size: a a a

2020 February 22

AZ

Alexandr Zh. in SPb Python
Встречал функции определённые внутри функций, но не понял, а зачем такое делать, если только это не декоратор или функцию нужно вернуть?
источник

S

Stan in SPb Python
Alexandr Zh.
Встречал функции определённые внутри функций, но не понял, а зачем такое делать, если только это не декоратор или функцию нужно вернуть?
Если функция не нужна снаружи, то почему бы нет? Скажем, сложный компаратор какой-то для сортировки в данной функции.
источник

YV

Yuliya Volkova in SPb Python
я наконец-то у компа, и теперь я могу кинуть пример
from timeit import timeit


def rt(arg1: int, arg2: int):
   def rt1(arg0: int, arg1: int = arg1, arg2: int = arg2):
       return arg0 + arg1 + arg2
   return rt1


def usage():
   main_sum = rt(3, 2)
   result = main_sum(3)
   return result


def rt1(arg0: int, arg1: int, arg2: int):
   return arg0 + arg1 + arg2


def usage_two():
   a = 3
   b = 2
   result = rt1(3, a, b)
   return result

print(timeit(usage, number=10000))
print(timeit(usage_two, number=10000))
источник

YV

Yuliya Volkova in SPb Python
то о чем я говорила, там будет разница вроде  0.006193043999999981 и
0.00196645099999998
источник

YV

Yuliya Volkova in SPb Python
под использованием я это имела в виду, наверное не совсем корректно описала о чем говорю
источник

YV

Yuliya Volkova in SPb Python
но, я не говорю что это оверхед и тд ) и ничего не доказываю
источник

YV

Yuliya Volkova in SPb Python
просто уточняю что имела в виду под 'в разы', какой кейс
источник

YV

Yuliya Volkova in SPb Python
но возможно это из-за прокидывания дефолтов, подумалось тут мне
источник

YV

Yuliya Volkova in SPb Python
что скорее всего, а не из-за вложенности
источник
2020 February 23

AZ

Alexandr Zh. in SPb Python
Stan
Если функция не нужна снаружи, то почему бы нет? Скажем, сложный компаратор какой-то для сортировки в данной функции.
Если не сложный компоратор, то норм, а сложный я бы вынес. Коллега как-то в методы классов добавлял функции, которые там и вызывал и получалась каша - вместо того, чтобы избавить читающего код от подробностей реализации этой ф., он всё это оставлял там, хотя вынеси это всё в приватный метод класса, код был бы читабельнее, а приватный метод было бы проще найти и отрефакторить, протестить в случае необходимости.
источник

YV

Yuliya Volkova in SPb Python
Yuliya Volkova
но возможно это из-за прокидывания дефолтов, подумалось тут мне
без дефолтов, когда первая функция выглядит как
def rt(arg1: int, arg2: int):

   def rt1(arg0: int):
       return arg0 + arg1 + arg2
   return rt1
источник

YV

Yuliya Volkova in SPb Python
всё равно в 2,5 раза
источник

YV

Yuliya Volkova in SPb Python
0.007078115999999968
0.002325701999999985
источник

YV

Yuliya Volkova in SPb Python
Python 3.7.4 (default, Sep  7 2019, 18:27:02)
[Clang 10.0.1 (clang-1001.0.46.4)] on darwin

но это конечно не бенч марк никакой, надо такие штуки более основательно мерить, но и к тому что на стаке тоже не показатель, что-то кто-то запустил и написал вот у меня полупустые вложенные функции на 30% всего едят больше, хорошо а что с итерированием по ним? за счет чего появляется оверхед? за счет того что появляются доп ноды и доп время на резолв этих вложенных объектов, тут лучше всего мерить в разных циклах, по разным типам операций, на разных платформах, можно как-нибудь упороться
источник

YV

Yuliya Volkova in SPb Python
что интересно, если не в pycharm терминале запускать, а в iterm, то обе цифры поменьше становятся 0.004958503000000003
0.001936474999999993
лол, лагище, хотя отношение друг к другу такое же в 2,5
источник

MP

Maxim Pyatishev in SPb Python
одно из преимуществ локальной функции в том, что она может захватывать объемлющий контекст. Но если бы в питоне лучше были бы развиты лямбды, то локальные функции требовалось намного реже.
источник

VD

Vsevolod Deresh in SPb Python
Типизация в функциях сейчас везде распространяется или пока это ещё для любителей новизны?
источник

YV

Yuliya Volkova in SPb Python
Vsevolod Deresh
Типизация в функциях сейчас везде распространяется или пока это ещё для любителей новизны?
Почему именно про функции вопрос?) они как-то специально выделены или вопрос в принципе про использование type annotation?
источник

VD

Vsevolod Deresh in SPb Python
Yuliya Volkova
Почему именно про функции вопрос?) они как-то специально выделены или вопрос в принципе про использование type annotation?
Про второе)
источник

MB

Max Block in SPb Python
Vsevolod Deresh
Типизация в функциях сейчас везде распространяется или пока это ещё для любителей новизны?
типизация в тренде уже давно, причем не только в питоне. в мире js огромным успехом пользуется typescript
источник