关于exec和eval

-- TOC --

exec

这个内置接口有时能在代码中起到“黑科技”的作用,但是使用一定要小心。

批量创建变量

创建a,b,c,d4个变量:

for i,n in zip(r,('a','b','c','d')):
    print(n,'=',i)
    exec(n + '=' + str(i))

创建INTRA_ANGULAR<n>变量,n从2到34,共33个变量:

# intra prediction modes
INTRA_PLANAR = 0
INTRA_DC     = 1
for i in range(2,34+1):
    exec(f'INTRA_ANGULAR{i} = i')

如果不使用globals参数,exec的执行就是在current scope内!

运行python脚本

我在P1025(gps)项目中使用过这个技巧。

程序界面有一个脚本窗口,可输入python代码,点击运行的时候,程序将用户输入的python代码,提交给exec接口去执行。

eval

对expression做evaluation。

关键就是理解什么是expression。简单地说,等号右边或者没有等号的statement都是expression。

>>> a = eval('1+2+3')
>>> a
6

eval有的时候与repr一起使用,可以起到还原对象的作用:

>>> d = {'a':1,'b':2}
>>> d
{'a': 1, 'b': 2}
>>> eval(repr(d))
{'a': 1, 'b': 2}

本文链接:https://cs.pynote.net/sf/python/202211092/

-- EOF --

-- MORE --