python之eval简述

eval()函数在Python中出镜率较高,TF中也频频出现。初学时候经常看的一头雾水。根据自己自学经验的查找的资料总结一下:
先说Python中它能干啥,怎么用。
函数原型:
eval(expression, globals=None, locals=None)
参数:globals和locals是表达式中变量所在的命名空间,一般默认是全局,但是也可以自己指定,globals必须是字典类型的数据格式(随后由例子),locals可以是其他映射类型的,两个参数如果同时存在,并且空间的变量有重复冲突,那么locals会覆盖相应的globals。有兴趣的可以自行百度。参数expression必须是一个字符串,内容可以是一段简单的代码,也可以是函数调用,比如:

a=10;
print(eval("a+1"))

输出结果为:11
下面我们修改一下代码,指定global。

g={"a":50}
a=10;
print("不带globals参数时候a+1的值:",eval("a+1"))
print("带globals参数时候a+1的值:",eval("a+1",globals=g))

输出结果为:
不带globals参数时候a+1的值: 11
带globals参数时候a+1的值: 51
再看一个例子,同时指定globals和locals

a=10
b=20
c=30
g={'a':6,'b':8}
t={'b':100,'c':10}
print(eval('a+b+c',g,t))

输出结果:
116

利用eval()函数我们还可以实现函数的动态调用:
比如我们要一次测试好几个函数,这些函数在参数格式上有相同的地方,那么我们可以使用eval来减轻代码的书写量,更加灵活的测试这些函数:比如以下代码,我们依次测试tf的数据转换类函数对于不同类型数据的转换结果。

d=0.1314926
f=0.13
i32=12
i64=65
vd=tf.Variable(d)
vf=tf.Variable(f)
vi32=tf.Variable(i32)
vi64=tf.Variable(i64)
sess.run(tf.global_variables_initializer())
def to_xxx(fun_name,x):
    return sess.run(eval(fun_name)(x))
funcs=["tf.to_double","tf.to_float","tf.to_int32","tf.to_int64"]
parms=[d,f,i32,i64,vd,vf,vi32,vi64]
for func in funcs:
    for parm in parms:
       print("当前变量值:",parm)
       print("当前函数:",func)
       print("运算结果:",to_xxx(func,parm))
       print("-----------------------------")

点击这里运行代码

猜你喜欢

转载自blog.csdn.net/qq_31150463/article/details/84560892
今日推荐