簡體   English   中英

python用kwargs調用一個函數

[英]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參數是一個空字典,因此您不會傳遞任何參數。 如果要將ab的值傳遞給newfunc ,可以使用

kwargs = {'a':1, 'b':2}
newfunc(**kwargs)

或者

newfunc(a=1, b=2)

在這兩種情況下,您都會在newfunc函數的 kwargs 字典中得到'a''b'

其次,您應該從newfunckwargs字典中提取您的論點。 print kwargs.get('a')這樣的東西就足夠了。

您忘記包含錯誤。 Error 本來是一個NameErrora未定義的。

您的代碼有很多問題:

def myfunc():
    kwargs = {}
    a = 1
    b = 2

這不會改變字典kwargs 這只是創建了兩個新的本地名稱ab 我想你想要的是:

    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.

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