python-字符串作为代码执行(exec、eval、locals、compile)_python将字符串作为代码执行-程序员宅基地

技术标签: python  

字符串作为代码执行的方法:

1、eval()

构造器:eval(source, globals=None, locals=None, /)

说明:输入一个【python表达式或code对象】参与计算。

用于恶意攻击,窥视:


再看下eval的参数globals和locals参数的用法,看栗子:

一幕了然,局部变量空间和全局变量空间的优先级的先后顺序~

 

2、exec

首先看下,exec和eval的区别

查阅官方doc:

细微差别:

eval:

(1)只能是一个表达式【也就是一行语句】字符串!

(2)可以计算, 也可以返回计算结果【也就是说表达式的结果就是eval的返回值】,不对代码做evaluate,即不产生新的变量等。

exec:

(1)指定一个包含一个多行语句的字符串对象。

(2)可以产生新的变量,但没有返回值(也就是None)。【需要区分函数的返回值和代码执行过程中的输出悉尼】

 

3、动态创建变量

(1)locals():字典类型,存放本地变量的命令空间

(2)exec()可以产生新的变量,eval()不行。

 

4、compile()

eval和exec的doc中都会提到compile,那么compile()到底怎么使用呢?

看doc可知:compile()将源码转为code对象,然后再传入给eval或者exec执行。

总结:

(1)compile()作用就是预包装code为一个对象,然后作为eval和exec的参数,同时支持很多其他功能,比如控制code的输出信息等等。

(2)compile重点参数在于mode,本质上和eva和exec一样!(使用exec模式,可以包装多行代码,而且eval()和exec()都可以执行,但是使用eval模型,则只能包装表达式!)

 

更多学习笔记可以关注我的微信公众号「kelly学挖掘」,欢迎交流。

--- over --

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qm5132/article/details/99672539

智能推荐

AutoCAD工程测量工具集-程序员宅基地

文章浏览阅读1.2k次。源代码见:将在本博客中陆续发布。。。下载地址:即将上传。AutoLisp程序可用appload命令加载。推荐加载时加入自启动组。所有命令均以“zz”开头,程序加载后在命令行中输入“zz”就会弹出所有命令列表,用上、下键在列表中选择后按回车键执行即可。

简单介绍一下关系数据库三范式?-程序员宅基地

文章浏览阅读972次。简单介绍一下关系数据库三范式?一、简单介绍一下关系数据库三范式?二、事务四个基本特征或 ACID 特性。一、简单介绍一下关系数据库三范式?  范式就是规范,就是关系型数据库在设计表时,要遵循的三个规范。要想满足第二范式必须先满足第一范式,要满足第三范式必须先满足第二范式。  第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。列数据的不可分割。  第二范式(2NF)要求数据库表中的每个行必须可以被唯一地区分。为实

如何解决并发修改异常_并发修改异常处理java-程序员宅基地

文章浏览阅读665次。如何解决并发修改异常解决方法:1.采用列表迭代器解决,添加元素的时候,必须使用列表迭代器的添加元素的方法。特点:在当前元素的后面添加指定元素2.采用普通for循环的方式遍历集合,并添加元素。特点:在集合元素的最后添加指定的元素3.采用CopyOnWriteArrayList集合实现,它自身已经规避了并发修改异常。特点:在集合元素的最后添加指定的元素..._并发修改异常处理java

Elasticsearch6.5.4版本集群安装设置密码_it doesn't look like the x-pack security feature i-程序员宅基地

文章浏览阅读2.9k次。1.ES安装配置文件1.1主节点配置文件# ======================== Elasticsearch Configuration =========================# ---------------------------------- Cluster -----------------------------------cluster.name: GzEsCluster# ------------------------------------ Node_it doesn't look like the x-pack security feature is available on this elasti

Mac安装TensorFlow/Caffe_mac怎么下载tensorflow caffe-程序员宅基地

文章浏览阅读1.3k次。参考:http://www.linuxidc.com/Linux/2016-09/135026.htm https://gist.github.com/doctorpangloss/f8463bddce2a91b949639522ea1dcbe4sudo brew install -vd snappy leveldb gflags glog szip lmdbsudo brew tap home_mac怎么下载tensorflow caffe

xfs文件系统的备份与恢复_xfs 备份-程序员宅基地

文章浏览阅读503次。什么是XFS文件系统XfS文件系统是SGI开发的高级日志文件系统,XFS极具伸缩性,非常健壮。所幸的是SGI将其移植到了Linux系统中。在linux环境下。目前版本可用的最新XFS文件系统的为1.2版本,可以很好地工作在2.4核心下。我们在这里要讲的是xfsdump和xfsrestore命令:XFS提供了 xfsdump 和 xfsrestore 工具协助备份XFS文件系统中的数据。xf..._xfs 备份

随便推点

STB 解码流程简介_stb码-程序员宅基地

文章浏览阅读1.6k次。stb 是机顶盒的简称,在模拟和数字转换的过程中,STB起到不可估量的作用,目前比较大牌的STB芯片厂商有ST、阿里、MStar、海斯等,主芯片可能不同,但是处理流程却是大同小异,现在大概总结如下:数字电视传输过程中是以射频信号承载的,也就是说在我们家中的信号线中传输的是射频信号,当我们吧信号线插上机顶盒后,射频信号通过tuner将某一频点的信号调制成中频信号,中频信号经过demod解调成8路_stb码

行业持续内卷,“单脚跳”的小影科技能跑多远?-程序员宅基地

文章浏览阅读91次。短视频市场蓬勃发展,视频剪辑类App也顺利搭上便车。剪辑市场火热,巨头纷纷驶入。如今,有一家剪辑软件公司已经开启了上市的步伐。近日,杭州小影创新科技股份有限公司申请创业板上市已获得受理,拟募集8.49亿元,用于主营业务相关的项目建设。很多人不禁疑惑,小影科技是谁?资料显示,小影科技成立于2012年,在移动视频编辑赛道上已经深耕了多年,是一家老牌的剪辑软件公司,旗下产品对于剪辑的多个领域均有涉猎,覆盖人群广阔。小影科技的旗下产品如VivaVideo、VivaVideo Pro、VivaCu_小影科技

Effective Exception Handling in Visual C++_handling vb activex events in visual c++ client-程序员宅基地

文章浏览阅读1.7k次。Effective Exception Handling in Visual C++在C++中进行有效的异常处理 出自CodeProject,原文链接:http://www.codeproject.com/Articles/207464/Exception-Handling-in-Visual-Cplusplus 译:[email protected]_handling vb activex events in visual c++ client

PHP实现小型问卷星,JS实现问卷星自动填问卷脚本并在两秒自动提交功能-程序员宅基地

文章浏览阅读725次。脚本只使用问卷星,多选题目前为选中任意选项数量!!!!!!!最近看到很多群里都在发问卷连接,各种求帮忙,正好这两天没任务,尝试写了自动填问卷的脚本,类似的脚本网上已经有了,但是后来问卷星加了验证,并且多选题已经不能适用脚本使用方式(以Firefox为例):一:鼠标移动到浏览器地址栏下空白处,右键,新建书签二:填写名称(任意),代码复制到地址栏中三:打开问卷星连接,然后点击刚刚添加的书签,即可。代码..._php 如何对接问卷星

PostgreSQL 自动生成 UUID(Guid)_pg生成uuid-程序员宅基地

文章浏览阅读4.2w次。系统:Windows 10版本:PostgreSQL 10.4PostgreSQL 支持 UUID(Guid) 类型,但是却不能直接去用,因为默认安装的postgresql 是不带 UUID 函数的,那怎么生成一个 UUID 呢,以下是搜索到的针对不同系统的不同解决方案,Windows 10 已验证可行。Linux 环境下:从安装目录下 share/contrib 下找 uuid..._pg生成uuid

ios发布App遇到的问题:“*证书*”has one iOS Distribution certificate but its private key is not installed_ios cert is incomplete. no private key found in-程序员宅基地

文章浏览阅读2.2w次,点赞3次,收藏2次。解决方法:重新创建certificate证书,上传本机的CSR证书认证文件然后下载证书到桌面,双击安装后,重新发布app到App Store中即可_ios cert is incomplete. no private key found in

推荐文章

热门文章

相关标签