我的编程空间,编程开发者的网络收藏夹
学习永远不晚

人生苦短我用python: eval,e

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

人生苦短我用python: eval,e

01、函数原型 eval(expression[, globals[, locals]])

python提供内置函数 eval 可以执行或者解释一串python表达式,这里的表达式仅限于一些运算操作,比如+,-,x,/等,不能进行类似函数调用。

其中,expression就是要执行的python表达式globals和locals是可选项,分别用于指明要执行解释表达式的全局,局部属性。

下面我们通过一个例子来演示这个eval函数。

>>> x=1;y=2
>>> x,y
(1, 2)
>>> eval('x,y')
(1, 2)
>>> eval('x+y')
3

下面我们演示globals和locals

>>> x=1;y=2
>>> x,y
(1, 2)
>>> g={'x':10,'y':20}
>>> g
{'y': 20, 'x': 10}
>>> eval('x,y',g)
(10, 20)
>>> eval('x+y',g)
30

上面的例子在外部给x,y的定义,g里面也定义了x,y,最终在调用eval的时候,传入了全局g,使得表达式里面的x,y使用的是全局g里面的x,y。

>>> x=1;y=2
>>> x,y
(1, 2)
>>> g={'x':10,'y':20}
>>> g
{'y': 20, 'x': 10}
>>> l={'x':100,'y':200}
>>> l
{'y': 200, 'x': 100}
>>> eval('x,y',g,l)
(100, 200)
>>> eval('x+y',g,l)
300

上面的例子我们既定义了全局g也定义了局部l,最终表达式使用的局部l里面的x,y。

02、函数原型 exec(expression[, globals[, locals]])

python还提供了另外一个函数exec,exec是可以看成是对eval的一个增强版,支持python的语句,也就是说可以执行python的函数和自定义函数,同时globals和locals参数意义跟eval一样。

下面我们通过一个简单的例子看看exec的实例。

>>> import platform
>>> exec('print platform.platform()')
Linux-4.4.0-57-generic-x86_64-with-Ubuntu-16.04-xenial

也就是说,我们可以在外部传入python代码或者表达式让python程序执行,这样的设计是很有意义的,后面的小结我们会讲一个具体的应用场景。

03、函数原型 compile(source, filename, mode[, flags[, dont_inherit]])

最后我们要看的是compile函数,compile比较有意思,它可以把传入的python语句编译成AST(Abstract Syntax Trees)对象,AST是python的抽象语法树,AST可以看成是python代码分析后的中间结果,最后会被编译成python虚拟机代码执行。

关于AST我们在以后的系列会详细介绍,今天我们先看看compile函数的例子。

>>> x=1;y=2
>>> x,y
(1, 2)
>>> c = compile('print x,y', '', 'exec')
>>> c
<code object <module> at 0x7f44ccb816b0, file "", line 1>
>>> exec c
1 2

上面的例子我们把python语句print x,y作为source参数传入,filename为空,mode是告诉compile编译模式可以选择的有 'exec' ,'eval', 'single' 我们选择'exec'可以被exec执行,最后使用exec执行AST对象。

小结

上面介绍了3个python内置函数,大家可能会问,这些函数在实际开发中的意义,这里我可以简单说一下,比如你在开发一个游戏程序,里面涉及一些数据计算(比如***力,法力等,根据不同的策略可以进行不同比例的增加,减少),我们可以把这部分数据计算独立成一个单独的脚本,让玩家或者游戏的运营人员进行调整,游戏程序可以动态加载这些语句使新的调整可以马上生效而不用动既有的代码,这种方式是比较灵活的。同时我们需要注意的是,因为exec这些函数可以解析执行python语言,需要对传入的语句进行有效的安全检查,以防被执行了一些危险代码。

敬请关注“睿江云计算”公众号获得更多干货资讯

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

人生苦短我用python: eval,e

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

人生苦短我用python: eval,e

01、函数原型 eval(expression[, globals[, locals]])python提供内置函数 eval 可以执行或者解释一串python表达式,这里的表达式仅限于一些运算操作,比如+,-,x,/等,不能进行类似函数调用
2023-01-31

人生苦短,我用 Python

从2015开始国内就开始慢慢接触Python了,从16年开始Python就已经在国内的热度更高了,目前也可以算的上"全民Python"了。众所周知小学生的教材里面已经有Python了,国家二级计算机证也需要学习Python了!因为Pytho
2023-06-02

人生苦短,我用python

星空不问赶路人,时光不负有心人,你可以脱变。  python2.7(2020年官方不在维护)  python3.6 (官方推荐)  1.下载安装包  https://www.python.org/ftp/python/2.7.14/pyth
2023-01-31

人生苦短,我学python

目录  1.JS之正则表达式  2.BootStrap    BootStrap规则  3.jQueryUI    jQueryUI规则  4.EasyUI    EasyUI规则  5.WEB框架  6.Django Web框架1.JS中
2023-01-31

人生苦短,我用Python(1)

一、人生苦短,我用Python在文章的开头给大家介绍一下Python语言,作者Guido von Rossum。对,就是图中的“人生苦短我用Python”那哥们。你可能以为我会用很多文字介绍Python,不,你错了。因为Python这么火,
2023-01-30

人生苦短我用python(04),Pyt

文章内容为原创,欢迎转载请注明出处作者: EflyPro->晦明禅师文章来源:公众号“睿江云计算”今天为大家介绍如何使用python的commands模块调用linux shell命令,同时附上一个实际例子给大家参考。commands库介绍
2023-01-31

Python崛起:“人生苦短,我用Pyt

这些年,编程语言的发展进程很快,在商业公司、开源社区两股力量的共同推动下,涌现出诸如Go、Swift这类后起之秀,其中最为耀眼的是Python。  在这里还是要推荐下我自己建的Python开发学习群:725479218,群里都是学Pytho
2023-01-31

人生苦短我用python(03),如何调

文章内容为原创,欢迎转载请注明出处作者: EflyPro->晦明禅师文章来源:公众号“睿江云计算”     今天我们要为大家介绍的是,如何调试python程序0.安装基础包我们以Ubuntu 16.04 为例子    sudo apt-ge
2023-01-31

【人生苦短,我用python】学习之路1

1、print()的作用是什么?会在输出窗口中显示一些文本2、分别输入5+8、print(5+8)、print("5"+"8") 看看有何不同?3、什么是BIF?python 3一共有多少个BIF?BIF就是Built-in Functio
2023-01-31

人生苦短,你用什么?

人生苦短,我用python!开始记录PJW每日如何学习python。
2023-01-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录