簡體   English   中英

將函數參數名稱傳遞給Python中的另一個函數

[英]Passing function parameter name to another function in Python

給出一個簡單的函數:

def A(a = 1, b = 2):
    return a+b

我想編寫另一個函數來更改ab的默認參數值。 用戶可以通過設置var = avar = b來指定要更改的參數。 例如:

def B(var = 'a', new_value = 10):
    temp_dict = {var:new_value}
    ans = A(var)
    return ans    

要么

def B(var = 'a', new_value = 10):
    ans = A(var = new_value)
    return ans

在函數def B() ,設置var = avar = new_value = 10 ,我期望A(var = new_value)可以達到與A(a = 10)相同的效果。 您知道編寫函數def B()的正確方法嗎? 謝謝。

你快到了 通過B()函數,在調用A() ,需要解壓縮temp_dict並將其作為參數傳遞給A() 見下文:

>>> def A(a = 1, b = 2):
...     return a+b
...

>>> def B(var = 'a', new_value = 10):
...     temp_dict = {var:new_value}
...     ans = A(**temp_dict)
        #        ^ unpack the dict, and pass it as an argument
...     return ans
...

>>> B()
12

有關此**如何與字典配合使用的更多詳細信息,請查看:

我可以隨意解釋OP想要的內容,即更改a或b的默認參數值 所以我要做的是返回轉換后的函數A,其中a或b的默認值都通過部分更改:

from functools import partial

def B3(var ="a", new_value=10):
    return partial(A, **{var:new_value})

樣本輸出:

(Pdb) f = B3("a",10)
(Pdb) f()
12
(Pdb) f = B3("b",10)
(Pdb) f()
11
(Pdb) f(a=10)
20
(Pdb) f(b=13)
14
(Pdb) f(a=5,b=5)
10

但是,與請求的第二部分不同,該請求具有基於B(var="a",new_value=10)作為函數簽名。

唯一的事情是,如果您不使用關鍵字參數,它會令人窒息:

(Pdb) f(7,7)
*** TypeError: A() got multiple values for keyword argument 'b'

暫無
暫無

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

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