Python сохранить функцию с аргументами в переменную без вызова функции - PullRequest
0 голосов
/ 05 августа 2020

Легко сохранить функцию в переменной, например

pr = print
pr(5)  # 5 

Но если это возможно, сохранить функцию с аргументами без вызова, например

some_var = defer print(5)  # No call! 
some_var()  # 5

Я попытался использовать лямбда , но это приводит к синтаксической ошибке `l = lambda 5:

Зачем мне это нужно? Например, чтобы не повторять несколько ветвей «если»:

пример:

def foo()
l1 = lambda: 1
l2 = lambda: 2
if 1:
    func = l1
elif 2:
    func = l2
else:
   func = some_outer_func, some_inner_func  
return func  # To use "func" need additional "if" branches for type and length of a returned value

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Путь с лямбдой:

pr = lambda: print(5)
pr()
1 голос
/ 05 августа 2020

functools.partial принимает функцию с множеством аргументов и возвращает функцию с меньшим количеством аргументов, при этом некоторые из аргументов «сохранены»

from functools import partial

print_five = partial(print, 5)
print_five()  # 5

Он также работает с аргументами ключевого слова

def foo(a, b=False):
    print(a, b)

bar = partial(foo, b=True)
foo(1)  # 1 False
bar(1)  # 1 True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...