Python之eval的使用


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM