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
的結果!!!