关于python中exec()函数的问题
本帖最后由 xqyqx 于 2022-5-23 09:49 编辑对于这段代码,exec中定义的函数可以正常使用,输出结果:3
mingling = 'def num(a,b):\n\treturn a+b'
exec(mingling)
print(num(1,2))
但是在下面的代码中,我将这段代码封装到一个函数中,程序报错:NameError: name 'num' is not defined
def main():
mingling = 'def num(a,b):\n\treturn a+b'
exec(mingling)
print(num(1,2))
main()
是作用域的问题吗,我该如何修改呢? 本帖最后由 fanvalen 于 2022-5-23 00:32 编辑
对于你说的第一组代码成功运行我差点就信了
编译是不同过的
从一个实例看到用一次就要exec一次,而不是将这文本当做永久函数写入再调佣
x = 10
expr = """
z = 30
sum = x + y + z
print(sum)
"""
def func():
y = 20
exec(expr)
exec(expr, {'x': 1, 'y': 2})
exec(expr, {'x': 1, 'y': 2}, {'y': 3, 'z': 4})
func() https://www.runoob.com/python3/python3-func-exec.html 本帖最后由 xqyqx 于 2022-5-23 08:02 编辑
fanvalen 发表于 2022-5-23 00:06
对于你说的第一组代码成功运行我差点就信了
编译是不同过的
确实在语法上会报错,但是好像真的能运行,挺奇怪的
调用两次也没问题:
本帖最后由 xqyqx 于 2022-5-23 12:04 编辑
limuyan44 发表于 2022-5-23 09:01
拿动态语句验证语法太流氓了,idea报错不代表真的报错。python查找变量的顺序是local-global,第一条能执行 ...
这样做在py文件里确实有效,但是编译为pyd后再调用会报错KeyError: 'num',请问该如何解决呢
调用py时的locals:
调用pyd时的locals:
页:
[1]