kek*_*kel 5 python arguments function python-3.x
我正在使用 Python 包中的一个类,我向该类传递必须只有一个参数的函数,例如:
def exampleFunction1(only_argument_1):
doSomething1(only_argument_1) #perform some operations
Run Code Online (Sandbox Code Playgroud)
然后,一旦以上述方式定义了所有需要的函数,我需要以这种方式传递它们:
python_package_class.function1 = exampleFunction1
python_package_class.function2 = exampleFunction2
python_package_class.function3 = exampleFunction3
Run Code Online (Sandbox Code Playgroud)
现在让我们假设 doSomething 对于我的所有函数都是相同的,除了它需要另一个可以更改的参数这一事实,例如(1、2 和 3 只是示例,参数可以是任何内容):
def exampleFunction1(only_argument_1):
doSomething(1, only_argument_1) #perform some operations
def exampleFunction2(only_argument_2):
doSomething(2, only_argument_2) #perform some operations
def exampleFunction3(only_argument_3):
doSomething(3, only_argument_3) #perform some operations
Run Code Online (Sandbox Code Playgroud)
通过仅定义一个 exampleFunction并向其传递两个参数,可以大大简化这一过程:
def exampleFunction(a, only_argument_1):
doSomething(a, only_argument_1) #perform some operations
Run Code Online (Sandbox Code Playgroud)
但是,不幸的是,这会给我带来一个错误,因为正如我所说,我正在使用的 Python 包严格要求函数只接受一个参数。
所以我的问题是,是否有一种“隐式方式”将参数传递 a 给以下代码行中的 exampleFunction ?
python_package_class.function1 = exampleFunction
Run Code Online (Sandbox Code Playgroud)
你应该使用functools.partial:
from functools import partial\n\ndef exampleFunction(a, only_argument_1):\n doSomething(a, only_argument_1)\n\npython_package_class.function1 = partial(exampleFunction, 1)\npython_package_class.function2 = partial(exampleFunction, 2)\npython_package_class.function3 = partial(exampleFunction, 3)\nRun Code Online (Sandbox Code Playgroud)\n该partial函数用于部分函数应用,其中 \xe2\x80\x9c 冻结 \xe2\x80\x9d 函数的某些部分\xe2\x80\x99s 参数和/或关键字,从而产生具有简化签名的新对象。
这是一个例子:
\nfrom functools import partial\n\ndef f(arg1, arg2):\n print(f\'{arg1} {arg2}\')\n\nf1 = partial(f, 1)\nf2 = partial(f, 2)\nf3 = partial(f, 3)\n\nprint(f1(\'a\')) # \'1 a\'\nprint(f2(\'a\')) # \'2 a\'\nprint(f3(\'b\')) # \'3 b\'\nRun Code Online (Sandbox Code Playgroud)\n