不是python内置函数_Python之内置函数并不安全的函数eval、exec、compile

eval()将字符串类型的代码执行并返回结果

print(eval('1+2+3+4'))

exec()将字符串类型的代码执行

print(exec("1+2+3+4"))

exec("print('hello,world')")

指定global参数

code = '''

import os

print(os.path.abspath('.'))

'''

code = '''

print(123)

a = 20

print(a)

'''

a = 10

exec(code,{'print':print},)

print(a)

参数说明:

1. 参数source:字符串或者AST(Abstract Syntax Trees)对象。即需要动态执行的代码段。

2. 参数 filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。当传入了source参数时,filename参数传入空字符即可。

3. 参数model:指定编译代码的种类,可以指定为 ‘exec’,’eval’,’single’。当source中包含流程语句时,model应指定为‘exec’;当source中只包含一个简单的求值表达式,model应指定为‘eval’;当source中包含了交互式命令语句,model应指定为’single’。

>>> #流程语句使用exec

>>> code1 = 'for i in range(0,10): print (i)'

>>> compile1 = compile(code1,'','exec')

>>> exec (compile1)

1

3

5

7

9

>>> #简单求值表达式用eval

>>> code2 = '1 + 2 + 3 + 4'

>>> compile2 = compile(code2,'','eval')

>>> eval(compile2)

>>> #交互语句用single

>>> code3 = 'name = input("please input your name:")'

>>> compile3 = compile(code3,'','single')

>>> name #执行前name变量不存在

Traceback (most recent call last):

File "", line 1, in

name

NameError: name 'name' is not defined

>>> exec(compile3) #执行时显示交互命令,提示输入

please input your name:'pythoner'

>>> name #执行后name变量有值

"'pythoner'"

W4rr10r 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Python之内置函数并不安全的函数eval、exec、compile!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值