【发布时间】:2013-05-16 21:45:16
【问题描述】:
假设我有一个函数get_data,它接受一些关键字参数。有什么办法可以做到这一点
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(),我也不能实现这种行为吗?
【问题讨论】:
-
不要修改
locals,甚至不能保证一直工作:docs.python.org/2/library/functions.html#locals -
.. 你为什么要这样做?如果您知道 arg2、arg3、arg4 总是会被传递,那么您应该将它们指定为单独的参数。如果你不这样做,那么即使你有想要的行为,只要你引用了
arg4而data没有定义arg4,它就会引发一个NameError。它甚至不会打印任何数据,只会引发错误。 -
@MorganWilde 我理解这个概念,但想法是避免在函数定义和函数调用中写名字
-
lovesh,在函数定义中避免使用名称是一个糟糕的概念,因为它很难理解哪些参数是必需的,哪些参数没有效果。
标签: python