我正在尝试从给定的输入变量创建字典。
我遇到了极其奇怪的行为,所以我开始调查。
我终于得出结论,函数有时会引用局部变量,有时会搜索相同名称的全局变量。
更具体地说:
这是一段简短的代码,说明了这个问题:
x = 1
y = 2
z = 3
def func(x,y,z):
print {var:eval(var) for var in ['x','y','z']} # Uses globals
print {'x':eval('x'),'y':eval('y'),'z':eval('z')} # Uses locals
print [(var,eval(var)) for var in ['x','y','z']] # Uses locals
print [('x',eval('x')),('y',eval('y')),('z',eval('z'))] # Uses locals
func(4,5,6)
打印输出:
{'y': 2, 'x': 1, 'z': 3}
{'y': 5, 'x': 4, 'z': 6}
[('x', 4), ('y', 5), ('z', 6)]
[('x', 4), ('y', 5), ('z', 6)]
有人可以解释一下我在这里缺少什么吗?
谢谢。