专业编程基础技术教程

网站首页 > 基础教程 正文

python 使用exec的疑惑(python中execute)

ccvgpt 2024-11-16 17:26:38 基础教程 7 ℃

简介

exec 执行储存在字符串或文件中的Python语句,相比于 eval,exec可以执行更复杂的 Python 代码。

python 使用exec的疑惑(python中execute)

exec函数功能强大,也很容易上手,在做未知变量定义时很好用。例如↓

有一个文本文件内容如下:

使用exec函数可以将其中的字符串语句定义为变量:

with open("data.txt","r",) as f:
        for line in f.readlines():
            exec(line)
 print("speed=",speed,type(speed))

执行结果:

speed: 20 <class 'int'>

简单方便,看起来和普通定义的变量没什么区别。但是,当执行下面这段看似正常的代码时却报了错

def main():
    exec("m=2")
    print(m)
main()

报错信息:

NameError: name 'm' is not defined

报错信息提示m未定义,明明前一行刚用exec定义了m,下面却报了未定义的错。修改代码:

def main():
    exec("m=2")
    fun()
    print(eval("m"))
main()

此次执行结果正常,说明eval对exec定义的变量能够正常运行。

修改代码,将exec函数放在最外层执行:

exec("m=2")
def main():
    print(m)
main()

执行结果正常。

再次修改代码,将main.m定义为全局变量:

def main():
    exec("main.m=2")
    print("main.m=",main.m)
main()

执行结果:

main.m=2

这里的原因不明。不过根据我的实验和猜测原因可能与变量的作用域有关,exec定义的局部变量,只能使用eval调用。exec定义的全局变量则可以通用,所以建议在使用exec函数定义变量使,采用全局变量的定义方法。

最近发表
标签列表