Несколько возможностей:
1. Используйте functools.partial
Если вы хотите исправить первый аргумент (или первые несколько аргументов), просто используйте functools.partial
:
from functools import partial
mycaller([partial(f1, bb)], aa)
Чтобы это работало с вашим примером, вы должны поменять местами порядок аргументов a
и b
в определении f1
.
2. Определите свой собственный partial
, который исправляет второй аргумент
Если вы хотите исправить второй аргумент, functools.partial
не поможет, потому что он работает слева направо. Но если у вас много функций, где вам нужно исправить второй аргумент, вы можете сделать что-то вроде этого:
def partial2(f, y):
def res(x):
return f(x, y)
return res
, а затем используйте его следующим образом:
mycaller([partial2(f1, bb)], aa)
3. Просто используйте lambda
s:
Это несколько многословно, но в то же время наиболее гибкая возможность:
mycaller([lambda x: f1(x, bb)], aa)
Явная лямбда может быть предпочтительнее, если вы не хотите загрязнять пространство имен набором тривиальных функций.
4. Просто определите вспомогательную функцию
Я не вижу ничего катастрофического в определении вспомогательной функции, особенно если она часто используется. Итак, просто оставьте closure_f1
как есть и используйте:
mycaller([closure_f1], aa)