吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 756|回复: 6
收起左侧

[已解决] 关于python中exec()函数的问题

[复制链接]
xqyqx 发表于 2022-5-22 19:13
本帖最后由 xqyqx 于 2022-5-23 09:49 编辑

对于这段代码,exec中定义的函数可以正常使用,输出结果:3
[Python] 纯文本查看 复制代码
mingling = 'def num(a,b):\n\treturn a+b'
exec(mingling)
print(num(1,2))

但是在下面的代码中,我将这段代码封装到一个函数中,程序报错:NameError: name 'num' is not defined
[Python] 纯文本查看 复制代码
def main():
    mingling = 'def num(a,b):\n\treturn a+b'
    exec(mingling)
    print(num(1,2))
main()

是作用域的问题吗,我该如何修改呢?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

fanvalen 发表于 2022-5-23 00:06
本帖最后由 fanvalen 于 2022-5-23 00:32 编辑

对于你说的第一组代码成功运行我差点就信了
搜狗截图20220523002907.jpg
编译是不同过的
从一个实例看到用一次就要exec一次,而不是将这文本当做永久函数写入再调佣
[Python] 纯文本查看 复制代码
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()
fanvalen 发表于 2022-5-23 00:36
 楼主| xqyqx 发表于 2022-5-23 07:56
本帖最后由 xqyqx 于 2022-5-23 08:02 编辑
fanvalen 发表于 2022-5-23 00:06
对于你说的第一组代码成功运行我差点就信了

编译是不同过的

确实在语法上会报错,但是好像真的能运行,挺奇怪的
2022-05-23_075457.png
调用两次也没问题:
2022-05-23_075458.png
 楼主| xqyqx 发表于 2022-5-23 11:58
本帖最后由 xqyqx 于 2022-5-23 12:04 编辑
limuyan44 发表于 2022-5-23 09:01
拿动态语句验证语法太流氓了,idea报错不代表真的报错。python查找变量的顺序是local-global,第一条能执行 ...

这样做在py文件里确实有效,但是编译为pyd后再调用会报错KeyError: 'num',请问该如何解决呢
调用py时的locals:
2022-05-23_120356.png
调用pyd时的locals:
2022-05-23_120410.png
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表