在理解列表中使用 exec()

Mar*_*rtí 3 python

我有一个可以独立运行的脚本,但有时会使用旨在覆盖脚本中定义的参数的外部调用。我使用它来工作exec()(这种方法的安全性不是这里的重点),但我不明白为什么它在 for 循环中工作,而不是在理解列表中工作。

foo = 1
bar = 2

externally_given = ['foo=10', 'bar=20']
for ext in externally_given:
    exec(ext)

print('Exec in for loop ->', foo, bar)

externally_given = ['foo=30', 'bar=40']
[exec(ext) for ext in externally_given]

print('Exec in comprehension list ->', foo, bar)
Run Code Online (Sandbox Code Playgroud)

输出:

Exec in for loop -> 10 20
Exec in comprehension list -> 10 20
Run Code Online (Sandbox Code Playgroud)

编辑:Python 版本 3.10

DYZ*_*DYZ 5

要更新全局变量,请通过作为第二个参数exec()传递来访问它们:globals()

[exec(ext,globals()) for ext in externally_given]
# [None, None]
foo
# 10
bar
# 20
Run Code Online (Sandbox Code Playgroud)

(以原帖所有好评为准。)