簡體   English   中英

使用“隱式”參數傳遞 function

[英]Passing a function with an “implicit” argument

我在 Python 中使用 package 中的 class ,我將必須只有一個參數的函數傳遞給它,例如:

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 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

這可以通過只定義一個我傳遞兩個參數exampleFunction來大大簡化:

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

但是,不幸的是,這會給我一個錯誤,因為正如我所說,我正在使用的 Python package 嚴格要求函數只接受一個參數。

所以我的問題是,在下面的代碼行中是否有一種“隱式方式”將參數a傳遞給 exampleFunction?

python_package_class.function1 = exampleFunction

您可以在一個元組中傳遞參數,該元組是一個參數,但其中包含任意數量的元素。 然后,您可以將其傳遞給您的第二個 function 將其擴展為單獨的參數。 例子:

def example_function(arg_list):
    other_function(*arg_list)


def other_function(arg_one, arg_two):
    print(f"received args: '{arg_one}', '{arg_two}'")


args = (1, "some_arg")
example_function(args)
args2 = (2, "some_arg")
example_function(args2)

OUTPUT

received args: '1', 'some_arg'
received args: '2', 'some_arg'

您應該使用functools.partial

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)

The partial function is used for partial function application which “freezes” some portion of a function's arguments and/or keywords resulting in a new object with a simplified signature.

這是一個例子:

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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM