Python 用“传递函数”;隐式;论点

Python 用“传递函数”;隐式;论点,python,python-3.x,function,arguments,Python,Python 3.x,Function,Arguments,我使用的是Python包中的一个类,我向该类传递的函数必须只有一个参数,例如: def exampleFunction1(only_argument_1): doSomething1(only_argument_1) #perform some operations 然后,一旦以上述方式定义了所有需要的函数,我需要以以下方式传递它们: python_package_class.function1 = exampleFunction1 python_package_class

我使用的是Python包中的一个类,我向该类传递的函数必须只有一个参数,例如:

def exampleFunction1(only_argument_1):
    
    doSomething1(only_argument_1) #perform some operations

然后,一旦以上述方式定义了所有需要的函数,我需要以以下方式传递它们:

python_package_class.function1 = exampleFunction1
python_package_class.function2 = exampleFunction2
python_package_class.function3 = exampleFunction3

现在让我们假设doSomething对于我的所有函数都是相等的,除了它需要另一个改变的参数,例如(1、2和3只是示例,参数可以是任何参数):

通过仅定义一个示例函数(我向其传递两个参数),这可以大大简化:

def exampleFunction(a, only_argument_1):
    
    doSomething(a, only_argument_1) #perform some operations

但是,不幸的是,这会给我一个错误,因为正如我所说的,我使用的Python包严格要求只接受一个参数的函数

所以我的问题是,是否有一种“隐式方式”将参数
a
传递给下面代码行中的example函数?

python_package_class.function1 = exampleFunction

您可以在元组中传递参数,元组是一个参数,但其中包含任意数量的元素。然后,您可以将其传递给第二个函数,将其扩展为单独的参数。例如:

def示例函数(参数列表):
其他函数(*参数列表)
def其他参数功能(参数一、参数二):
打印(f“收到的参数:{arg_one}',{arg_two}')
args=(1,“一些arg”)
示例_函数(args)
args2=(2,“一些arg”)
示例_函数(args2)
输出

收到的参数:“1”,“某些参数”
收到args:'2','some_arg'
您应该使用:

partial
函数用于部分函数应用程序,该应用程序“冻结”函数参数和/或关键字的某些部分,从而生成具有简化签名的新对象

以下是一个例子:

from functools import partial

def f(arg1, arg2):
    print(f'{arg1} {arg2}')

f1 = partial(f, 1)
f2 = partial(f, 2)
f3 = partial(f, 3)

print(f1('a')) # '1 a'
print(f2('a')) # '2 a'
print(f3('b')) # '3 b'

你不能在元组或列表中传递你的两个参数吗。这样,函数只接受一个参数,即元组或列表。但是这个论点里面包含了很多元素,非常感谢你的回答。我从来没有想过这个解决方案,这可能会奏效,但实现起来并不简单。我试试看。
from functools import partial

def exampleFunction(a, only_argument_1):
    doSomething(a, only_argument_1)

python_package_class.function1 = partial(exampleFunction, 1)
python_package_class.function2 = partial(exampleFunction, 2)
python_package_class.function3 = partial(exampleFunction, 3)
from functools import partial

def f(arg1, arg2):
    print(f'{arg1} {arg2}')

f1 = partial(f, 1)
f2 = partial(f, 2)
f3 = partial(f, 3)

print(f1('a')) # '1 a'
print(f2('a')) # '2 a'
print(f3('b')) # '3 b'