我有一個函數P()
。致電load_variables()
應該給P
變量x
。 load_variables
應該能夠接受默認值作爲關鍵字參數。有意將變量放入調用者範圍的函數
這怎麼辦?
我曾嘗試以下:
import inspect
def P():
x = 1
load_variables(x = 2)
return x
def load_variables(**kargs):
stack = inspect.stack()
try:
locals_ = stack[1][0].f_locals
finally:
del stack
for __k, __v in kargs.iteritems():
locals_[__k] = __v
print P() # => should print 2
的x = 1
線不應實際在那裏,因爲我想load_variables()
只是流血x
到P
的範圍。
是否有另一種方法可能更好?我想要的是:
- 變量有一個默認值,例如,
x = 2
在上面的電話load_variables()
。 - 我可以覆蓋這些在
load_variables
,例如,load_varibales()
有權訪問變量字典,如果x
已經在這裏,我們覆蓋它,並且溢出這個x
而不是給定的默認參數。
我如何保證參數的順序與返回時相同?例如。如@Mohammad Ali寫道,'print load_variables(x = 2,y = 4,z = 10)'返回爲'{'y':4,'x':2,'z':10}' – 2012-08-06 09:31:10
@ MadsOhmLarsen你必須將它們返回爲'return x,y,z'。 – ecatmur 2012-08-06 09:33:57
關鍵字參數是一個字典,所以它不應該關心順序,這就是爲什麼我得到上面的混合回報。是否有可能獲得它們被輸入到'load_variables'的順序,以便我可以按照相同的順序返回未知數量的關鍵字參數? – 2012-08-06 09:55:15