python 中的 globas 和 exec

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 函数(例如:exec(f'{names[num]}') 然后我得到名称错误。

考虑到 exec returns 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

更新:如果你想return一些东西,你必须使用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 循环中放错了打印,您应该执行变量的打印,仅执行变量不会 return 也不会打印任何内容。这应该有效:

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})")