Python中exec函数执行含变量名的代码为何不输出变量值?
Python中exec函数执行含变量名的代码为何不输出变量值?
嗨,这个问题问得挺接地气的,我给你掰扯清楚其中的门道:
你遇到的现象太正常了——exec("a=1\nprint(a)")能输出1,是因为你主动调用了print()函数要求输出;但换成exec("a=1\na")就没动静,这可不是Python搞特殊,核心是交互器和exec的运行逻辑完全不一样。
先聊聊你熟悉的Python交互器(就是敲>>>的那个环境):它是专门给咱们调试、试代码用的,自带一个专属的“自动打印”小机制——只要你输入的是一个独立表达式(比如单独敲变量名a),它就会自动把这个表达式的结果抓出来,用repr()处理后打印给你看。这是交互器为了方便咱们快速看结果加的“福利”,可不是Python代码本身的默认行为。
但exec()函数的定位不一样,它就是个“老实的代码执行者”:它只会老老实实跑完你给的代码块,不会多做任何额外操作——既不会捕获表达式的返回值,更不会主动帮你打印东西。你给它的"a=1\na",其实就是先执行a=1完成赋值,然后执行a这个表达式,但这个表达式的结果只是躺在内存里,exec才不会管它,就像你在普通Python脚本(非交互模式)里写了一行a,运行脚本时啥也不会输出,完全是一个道理。
给你举俩对比例子更直观:
- 交互模式下(自动打印生效):
这里的>>> a = 1 >>> a 11是交互器帮你打印的,不是a这个语句本身产生的输出。 - 普通脚本/
exec环境下(无自动打印):# 普通脚本里写这两行,运行后啥也不会输出 a = 1 a
要是你非得让exec("a=1\na")输出1也简单,要么像第一个例子那样给代码里加上print(),比如exec("a=1\nprint(a)");要么也可以把赋值和输出分开写:
exec("a=1") print(a)
这样就能得到你想要的结果啦。
备注:内容来源于stack exchange,提问作者ijustwantedtosayhi
相关产品推荐
相关产品推荐

