python-字符串作为代码执行(exec、eval、locals、compile)

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

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 --

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值