1. 程式人生 > >python中的eval函式

python中的eval函式

eval()函式十分強大,官方demo解釋為:將字串str當成有效的表示式來求值並返回計算結果。

so,結合math當成一個計算器很好用。

其他用法,可以把list,tuple,dict和string相互轉化。見下例子:

a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
b = eval(a)
b
Out[3]: [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
type(b)
Out[4]: list
a = "{1: 'a', 2: 'b'}"
b = eval(a)
b
Out[7]: {1: 'a', 2: 'b'}
type(b)
Out[8]: dict
a = "([1,2], [3,4], [5,6], [7,8], (9,0))"
b = eval(a)
b
Out[11]: ([1, 2], [3, 4], [5, 6], [7, 8], (9, 0))

不可謂不強大!

But !強大的函式有代價。安全性是其最大的缺點。

想一想這種使用環境:需要使用者輸入一個表示式,並求值。

如果使用者惡意輸入,例如:__import__('os').system('dir')

那麼eval()之後,你會發現,當前目錄檔案都會展現在使用者前面。

那麼繼續輸入:open('檔名').read()  

程式碼都給人看了。獲取完畢,一條刪除命令,檔案消失。哭吧!

怎麼避免安全問題?

1、自行寫檢查函式;

2、使用ast.literal_eval

轉載自: http://blog.csdn.net/zhanh1218/article/details/37562167?utm_source=tuicool&utm_medium=referral  

相關推薦

pythoneval函式作用

eval函式就是實現list、dict、tuple與str之間的轉化str函式把list,dict,tuple轉為為字串一、字串轉換成列表 a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]" print(type(a)) b = eval(a)print(type(

Pythoneval函式的作用

eval函式就是實現list、dict、tuple與str之間的轉化 str函式把list,dict,tuple轉為為字串 # 字串轉換成列表 a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]" print(type(a)) b = eval(a) print(b)

pythoneval函式

函式的解釋是:返回 這個字串原本的樣子# -*- coding: UTF-8 -*-import jsonvar1 = "{'hello':'world'}"var2 = "2323"var3 =  "

pythoneval()函式和input()函式用法解析

1.eval()函式 eval(<字串>)能夠以Python表示式的方式解析並執行字串,並將返回結果輸出。eval()函式將去掉字串的兩個引號,將其解釋為一個變數。 作用: a. 處理數字 單引號,雙引號,eval()函式都將其解釋為int型別;三引號

python函式的應用

一、什麼是偏函式? (1)在Python的functools模組眾多的功能中,其中有一個就是偏函式,我們稱之為 partial function 模組的概念我們下一篇在細講。 (2)我們都聽過偏將軍吧,在三國時代的官制中,系將軍的輔佐,與裨將軍兩者都

python mean()函式功能:求取均值

用法:mean(matrix,axis=0)  其中 matrix為一個矩陣,axis為引數 以m * n矩陣舉例: axis 不設定值,對 m*n 個數求均值,返回一個實數 axis = 0:壓縮行,對各列求均值,返回 1* n 矩陣 axis =1 :壓縮列,對各行求均

Pythonsplit()函式用法和例項

一、描述 split()通過指定分隔符對字串進行切片,如果引數num 有指定值,則僅分隔 num 個子字串 函式形式:str.split(str="", num=string.count(str)) 引數: str -- 分隔符,預設為所有的空字元,包括空格、換行(\n)、製表

Python檢視函式相關文件

1.dir檢視物件屬性 >>> dir(set) ['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__ge

pythonencode()函式的用法

python字串函式用法大全連結 encode()函式 描述:以指定的編碼格式編碼字串,預設編碼為 'utf-8'。 語法:str.encode(encoding='utf-8', errors='strict')     -> bytes (獲得by

pythoncount()函式的用法

python字串函式用法大全連結 count()函式 描述:統計字串裡某個字元出現的次數。可以選擇字串索引的起始位置和結束位置。            語法:str.count("char", start,end) 

pythoncenter()函式的用法

python字串函式用法大全連結 center()函式 描述:返回一個長度為width,兩邊用fillchar(單字元)填充的字串,即字串str居中,兩邊用fillchar填充。若字串的長度大於width,則直接返回字串str 語法:str.center(width , "fillcha

pythoncasefold()函式的用法

python字串函式用法大全連結 casefold()函式 描述:將字串中的所有大寫字母轉換為小寫字母。 語法:str.casefold()   -> str 返回字串 程式示例: str1 = "I Love Python" str2 = "Groß

pythonstartswith()函式的用法

python字串函式用法大全連結 startswith()函式 描述:判斷字串是否以指定字元或子字串開頭。 語法:str.endswith("suffix", start, end) 或 str[start,end].endswith("suffix")    用

pythonendswith()函式的用法

python字串函式用法大全連結 endswith()函式 描述:判斷字串是否以指定字元或子字串結尾。 語法:str.endswith("suffix", start, end) 或 str[start,end].endswith("suffix")    用於判

pythonexpandtabs()函式的用法

python字串函式用法大全連結 expandtabs()函式 描述:返回一個字串的副本。使原字串中的製表符("\t")的使用空間變大。使用空格來擴充套件空間。 語法: str.expandtabs(tabsize=8)  —> str  返回字串 t

pythondecode()函式函式的用法

python字串函式用法大全連結 decode()函式 描述:以 encoding 指定的編碼格式解碼字串,預設編碼為字串編碼。 encoding ——要使用的編碼,如:utf-8,gb2312,cp936,gbk等。 errors ——設定不同解碼

詳解pythonformat函式的強大功能

1、引數替換        format函式可以不限定引數個數,不限定引數位置。        一、不設定指定位置,按預設順序           &nb

Python雜談 | (三) Pythonflatten()函式的用法

目錄   一、簡介 二、用於array 三、用於mat 四、用於列表 一、簡介 Python的flatten()函式位於numpy庫中,只適用於array或mat這兩個NumPy物件,普通的列表不行。 二、用於array 三、用於mat

Python property() 函式及 @property 裝飾器的使用

Python 中 property() 函式及 @property 裝飾器的使用 文章目錄 Python 中 property() 函式及 @property 裝飾器的使用 0. 參考資料 1. property 應用場景 2.

pythonjoin函式的用法

這個函式可以對字串按照某種方式進行拼接,比如你要在三個字母中間都新增一個特定字元,就可以用這個函式實現   result = '*'.join(['A','B','C']) print(result) #A*B*C 當然join後傳入的引數是一個string型別同樣也是可以的