我有一個看似簡單的問題,我無法找到答案。 用一個簡單的功能,如下列:在python中使用額外的** kwargs:如何訪問額外的變量?
def test_kwargs_1(a,**kwargs):
print a
print b
我在想,如果我通過:
kwargs = {'a':1,'b':2}
test_kwargs_1(**kwargs)
它會打印:
1
2
,因爲它會解壓「kwargs 「並且變量」a「和」b「都可用。 相反,我得到:
1
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
.
.
----> 3 print b
NameError: global name 'b' is not defined
據我所知,「B」是可以或者可能不存在一個變量,但我認爲kwargs的拆包將使變量「b」可如果kwargs明確定義。 我沒有得到什麼? 謝謝, 小號
''b'沒有在函數'test_kwargs_1'中聲明,如錯誤所述。在函數中訪問未定義的'kwargs'的方法是將其作爲字典進行推理:'kwargs ['b']'。 –
[Python *參數對\ * \ *(雙星)和\ *(星)做什麼的可能重複?](http://stackoverflow.com/questions/36901/what-does-double-star-and- star-do-for-python-parameters) – GingerPlusPlus
感謝您的回覆。這是我給自己的解釋,但我覺得它有點不合邏輯。我認爲,如果一個變量被聲明或不會,傳遞** kwargs將解開kwargs字典中的內容,並有效地執行「a = 1」和「b = 2」。它實際上是「a = 1」,因爲print(a)起作用,而「b」仍然是字典的關鍵字並且需要被訪問。我明白一個函數應該如何給出警告(因爲「b」可能不會被傳遞),但是在我看來,根據參數是否爲位置來執行兩個不同的事情。 – serrajo