假設我有一個函數get_data
,它需要一些關鍵字參數。有沒有一些方法,我可以做到這一點在函數調用和定義中使用** kwargs
def get_data(arg1, **kwargs):
print arg1, arg2, arg3, arg4
arg1 = 1
data['arg2'] = 2
data['arg3'] = 3
data['arg4'] = 4
get_data(arg1, **data)
這樣的想法是爲了避免在這兩個函數調用和函數定義的輸入參數的名稱。我用字典作爲參數調用該函數,並且字典的鍵變成函數的局部變量,它們的值是字典值
我試過上面的錯誤,說錯了,說的是global name 'arg2' is not defined
。我知道我可以更改get_data
的定義中的locals()
以獲得所需的行爲。
所以我的代碼看起來像這樣
def get_data(arg1, kwargs):
locals().update(kwargs)
print arg1, arg2, arg3, arg4
arg1 = 1
data['arg2'] = 2
data['arg3'] = 3
data['arg4'] = 4
get_data(arg1, data)
,它不會太工作。也不能不使用locals()
實現行爲?
我建議你檢查出這個問題http://stackoverflow.com/questions/3394835/args-and-kwargs –
不要修改'locals' ,它甚至不保證一直工作:http://docs.python.org/2/library/functions.html#locals – jamylak
..爲什麼你會這麼做?如果你知道arg2,arg3,arg4總是那麼你應該將它們指定爲單獨的參數,如果你不這樣做,那麼即使你有所需的行爲,只要你引用'arg4'時'data'沒有定義'arg4',它會引發一個NameError,它甚至不會打印任何數據,只會引發錯誤。 – kampu