我有一个函数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