eval的使用
eval()
函数十分强大,将字符串 当成 有效的表达式 来求值 并 返回计算结果。
举个栗子
>ipython
Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: eval("1 + 1") # 基本的数学计算
Out[1]: 2
In [2]: eval("'*' * 10") # 字符串重复
Out[2]: '**********'
In [3]: type(eval("[1, 2, 3, 4, 5]")) # 将字符串转换成列表
Out[3]: list
In [4]: type(eval("{'name': 'xiaoming', 'age': 18}")) # 将字符串转换成字典
Out[4]: dict
In [5]: exit
>
不要滥用 eval,就像下面:
简单计算器——实现加减乘除混合运算
input_str = input("请输入一个算术题:")
print(input_str+"的结果是:", eval(input_str))
在开发时千万不要使用 eval 直接转换 input 的结果
原因:
__import__('os').system('ls')
# 等价代码
import os
os.system("终端命令")
- 执行成功,返回 0
- 执行失败,返回错误信息
附录:windows下常用新建文件命令:
# 创建文件夹:md 文件夹名
# 创建空的文件:type nul>文件名
# 创建有内容文件:echo "内容">文件名
# 查看文件内容:type +文件名
# 查看目录及子文件:dir
# 删除空文件夹:rd 文件夹名
# 删除文件及所有子文件:rd /s/q 文件夹名
# 删除文件:del 文件名
接着上面计算器的代码执行:
若用户
在输入框内执行如下非破坏性
代码
# 新建文件
> 请输入一个算术题:__import__('os').system('echo "new file"> 新文件.txt')
__import__('os').system('echo "new file"> 新文件.txe')的结果是: 0
# 删除文件
> 请输入一个算术题:__import__('os').system('del 新文件.txt')
__import__('os').system('del 新文件.txe')的结果是: 0
不要滥用eval,尤其是在开发时千万不要使用
eval
直接转换input
的结果!!!