您好,登錄后才能下訂單哦!
小編給大家分享一下Python中eval函數是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家學習,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去學習方法吧!
eval() 函數用來執行一個字符串表達式,并返回表達式的值。
eval(expression[, globals[, locals]])
·expression:表達式。
·globals:變量作用域,全局命名空間,如果被提供,則必須是一個字典對象。
·locals:變量作用域,局部命名空間,如果被提供,可以是任何映射對象。
>>>x = 7 >>> eval( '3 * x' ) 21 >>> eval('pow(2,2)') 4 >>> n=81 >>> eval("n + 4") 85
默認作用域
在 globals 和 locals 兩個參數省略的情況下,eval() 函數在當前的作用域執行:
x = 100 y = 200 def compute(): x = 10 y = 20 print(eval("x + y")) compute()
輸出結果:
30
globals 作用域
Python 的全局名字空間存儲在一個叫 globals() 的字典對象中;局部名字空間存儲在一個叫 locals() 的字典對象中。我們可以用 print () 來查看該函數體內的所有變量名和變量值。
x = 100 y = 200 def compute(): x = 10 y = 20 print(globals()) print(locals()) compute()
輸出結果:
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external. SourceFileLoader object at 0x0000024AC58C7710>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/Code/draw.py', '__cached__': None, 'x': 100, 'y': 200, 'compute': <function compute at 0x0000024AC587C268>} {'x': 10, 'y': 20}
從結果可以看到,globals() 的結果包含了全局變量 'x': 100, 'y': 200 ,而 locals() 則包含的是局部變量 'x': 10, 'y': 20。eval 函數包含 globals 參數則會使用全局作用域下的變量。
x = 100 y = 200 def compute(): x = 10 y = 20 print(eval("x + y", globals())) compute()
輸出結果:
300
locals 作用域
如果同時包含 globals 和 locals 參數,則會優先在本地作用域查找,如果本地作用域沒有,才會查找全局作用域。
x = 100 def compute(): y = 20 print(eval("x + y", globals(), locals())) compute()
輸出結果:
120
字符串轉換
字符串轉換成列表
s = "[[1,2], [3,4], [5,6]]" print(type(s)) lst = eval(s) print(type(lst)) print(lst)
輸出結果:
<class 'str'> <class 'list'> [[1, 2], [3, 4], [5, 6]]
字符串轉換成字典
s = "{'math': 90, 'chinese': 100}" print(type(s)) dic = eval(s) print(type(dic)) print(dic)
輸出結果:
<class 'str'> <class 'dict'> {'math': 90, 'chinese': 100}
字符串轉換成元組
s = "([1,2], [3,4], [5,6])" print(type(s)) tup = eval(s) print(type(tup)) print(tup)
輸出結果:
<class 'str'> <class 'tuple'> ([1, 2], [3, 4], [5, 6])
需要注意的地方
eval() 函數有安全性問題,比如用戶惡意輸入就會獲得當前目錄文件。
eval("__import__('os').system('dir')")
甚至查看目錄下的所有文件的內容:
eval(open(‘filename’).read())
怎么避免安全問題?
·自行寫檢查函數;
·使用 ast.literal_eval。
以上是Python中eval函數是什么的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。