python eval函数代码演示

一.函数说明:

1.1 eval(expression, globals=None, locals=None)

  • 参数:
    • expression:这是一个字符串的python表达式,python可以用globals字典和locals字典作为全局和局部的变量命名空间,eval对expression进行解析和计算,用到的变量从globals和locals中查找。
    • globals:这个参数是一个全局变量的命名空间,也就是我们在计算表达式的时候可以使用全局命名空间中的变量或函数,若有这个函数,且没有提供自定义的__builtins__,那么会将当前环境中的__builtins__拷贝到自己提供的globals里,才会进行计算。如果globals没有被提供,则使用python的全局命名空间。
    • locals:这个参数是一个局部变量的命名空间,和globals类似,不过当它和globals中有重复的部分时,locals里的定义会覆盖掉globals中的。若locals中没有被提供,则为globals中的。
  1. eval函数也可以被用来执行任意的代码对象(如那些由compile()创建的对象)。在这种情况下,expression参数是一个代码对象而不是一个字符串。如果代码对象已经被‘exec‘编译为模式参数,eavl()的返回值是None。
  2. eval() 传参不支持键值传参, 仅支持位置传参(下面代码中有演示)

二. 代码演示

$ ipython
Python 3.8.3 (default, Jul  2 2020, 17:30:36) [MSC v.1916 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.16.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: x =1
# 简单一点的
In [2]: eval("x+1")
Out[2]: 2

In [3]: d1 = {"x": 12}
# 加个globals字典
In [4]: eval("x+1", d1)
Out[4]: 13

In [5]: y=2

In [6]: z=3

In [7]: d2={"x": 20, "y":100}

In [8]: d3={"y":200, "z": 50}

In [9]: eval("x+y+z", d2, d3)
Out[9]: 270

In [10]: express = "x+y+z"

In [11]: eval(express,d2,d3)
Out[11]: 270

In [12]: express2="xyz"

In [13]: eval(express,d2,d3)
Out[13]: 270

In [14]: eval(express2,d2,d3)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-14-d46906148e81> in <module>
----> 1 eval(express2,d2,d3)

<string> in <module>

NameError: name 'xyz' is not defined

In [15]: eval('express2',d2,d3)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-15-cbfdb004de25> in <module>
----> 1 eval('express2',d2,d3)

<string> in <module>

NameError: name 'express2' is not defined

In [16]: eval('express2')
Out[16]: 'xyz'

2.1 小应用

# notebook中
d1={'A': 8, "B":3, "E": "=A*(A-B)+B/3"}
result = d1.get("E").replace("=","")
print(result)
eval(result,d1)

A*(A-B)+B/3
41.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值