globas and exec in python



我已经编写了代码,使用for循环创建变量和赋值。

nums = [0,1,2,3]
names = ["aa","bb","cc","dd"]
for num, name in zip(nums, names):
globals()["df"+str(num)]= names[num]
print(exec(f'df{num}'))

但是我得到的结果是None

#result:
None
None
None
None

,但即使我试图改变代码与以下修改,仍然得到相同的


nums = [0,1,2,3]
names = ["aa","bb","cc","dd"]
for num, name in zip(nums, names):
globals()["df"+str(num)]= name
print(exec(f'df{num}'))

有谁能帮我找出这个问题的正确答案吗?

注意:即使我在名字的地方使用了exec函数(ex: exec(f'{names[num]}'),然后我得到名字错误。

考虑到exec返回None,我不明白为什么您会有其他期望。

试着改变你的代码,看看它是否正常工作,例如:

nums = [0,1,2,3]
names = ["aa","bb","cc","dd"]
for num, name in zip(nums, names):
globals()["df"+str(num)]= name
exec(f'print(df{num})')

输出:

aa
bb
cc
dd

更新:如果你想返回一些东西,你必须使用eval:

nums = [0,1,2,3]
names = ["aa","bb","cc","dd"]
for num, name in zip(nums, names):
globals()["df"+str(num)]= name
print(eval(f'df{num}'))

输出:

aa
bb
cc
dd

我认为你在for循环中放错了打印,你应该执行变量的打印,只有执行变量不会返回也不会打印任何东西。这应该可以工作:

nums = [0, 1, 2, 3]
names = ["aa", "bb", "cc", "dd"]
for num, name in zip(nums, names):
globals()["df" + str(num)] = name
exec(f"print(df{num})")

最新更新