[英]python call a function with kwargs
我有一個功能:
def myfunc():
kwargs = {}
a = 1
b = 2
kwargs.update(a=a, b=b)
newfunc(**kwargs)
還有我的新功能
def newfunc(**kwargs):
print a
它沒有給出 1 的值
怎么了 ?
這是因為您沒有在字典中放置任何鍵、值,您應該這樣寫:
def newfunc(**kwargs):
print kwargs["a"]
def myfunc():
kwargs = {"a" :1, "b": 2}
newfunc(**kwargs)
您可以參考此線程以更好地理解 kwargs: Understanding kwargs in Python
兩件事情。
首先,您在myfunc
中的kwargs
參數是一個空字典,因此您不會傳遞任何參數。 如果要將a
和b
的值傳遞給newfunc
,可以使用
kwargs = {'a':1, 'b':2}
newfunc(**kwargs)
或者
newfunc(a=1, b=2)
在這兩種情況下,您都會在newfunc
函數的 kwargs 字典中得到'a'
和'b'
。
其次,您應該從newfunc
的kwargs
字典中提取您的論點。 像print kwargs.get('a')
這樣的東西就足夠了。
您忘記包含錯誤。 Error 本來是一個NameError
, a
未定義的。
您的代碼有很多問題:
def myfunc():
kwargs = {}
a = 1
b = 2
這不會改變字典kwargs
。 這只是創建了兩個新的本地名稱a
和b
。 我想你想要的是:
kwargs = {}
kwargs["a"] = 1
kwargs["b"] = 2
編輯:您的更新確實解決了此行上方的問題
然后:
def newfunc(**kwargs):
print a
會給你一個錯誤,因為a
應該來自哪里?
在這里使用**kwargs
只是告訴 python 將所有(以前未吸收的)參數存儲在新字典中。 您因此想要的是:
def newfunc(a,b):
print a
或者
def newfunc(**kwargs):
print kwargs["a"]
看看您的代碼,您似乎對如何處理字典的概念感到困惑。 如果您坐下來閱讀有關python dict
的教程,也許您提出的問題會更容易回答自己
您應該將 yor 變量添加到字典中並在變量位置打印該項目。 在我看來,你的代碼應該寫成:
def myfunc():
kwargs = {'a': 1,
'b': 2}
newfunc(**kwargs)
def newfunc(**kwargs):
print(kwargs['a'])
if(__name__ == '__main__'):
myfunc()
或者你的 newfunc 應該有你想用 kwargs 字典填充的參數,如:
def myfunc():
kwargs = {'a': 1,
'b': 2}
newfunc(**kwargs)
def newfunc(a, b):
print(a)
if(__name__ == '__main__'):
myfunc()
希望有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.