亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中eval函數是什么

發布時間:2020-08-04 15:03:31 來源:億速云 閱讀:328 作者:清晨 欄目:編程語言

小編給大家分享一下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函數是什么的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

射阳县| 营口市| 麻城市| 宁国市| 邵阳市| 兴安盟| 大关县| 香港| 汉中市| 米脂县| 濮阳市| 兴安县| 连云港市| 化州市| 上林县| 宜川县| 广水市| 铁岭市| 盘锦市| 富川| 定南县| 塔河县| 徐水县| 克东县| 罗平县| 罗甸县| 建阳市| 沙湾县| 太康县| 彩票| 合水县| 滕州市| 伊金霍洛旗| 昌都县| 卓资县| 桦甸市| 和田县| 天全县| 大荔县| 竹北市| 满洲里市|