欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Python中eval函數(shù)是什么

小編給大家分享一下Python中eval函數(shù)是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家學(xué)習(xí),希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去學(xué)習(xí)方法吧!

我們提供的服務(wù)有:做網(wǎng)站、成都網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、沅陵ssl等。為上千企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢(xún)和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的沅陵網(wǎng)站制作公司

eval() 函數(shù)用來(lái)執(zhí)行一個(gè)字符串表達(dá)式,并返回表達(dá)式的值。

eval(expression[, globals[, locals]])

·expression:表達(dá)式。

·globals:變量作用域,全局命名空間,如果被提供,則必須是一個(gè)字典對(duì)象。

·locals:變量作用域,局部命名空間,如果被提供,可以是任何映射對(duì)象。

>>>x = 7
>>> eval( '3 * x' )
21
>>> eval('pow(2,2)')
4
>>> n=81
>>> eval("n + 4")
85

默認(rèn)作用域

在 globals 和 locals 兩個(gè)參數(shù)省略的情況下,eval() 函數(shù)在當(dāng)前的作用域執(zhí)行:

x = 100
y = 200
def compute():
    x = 10
    y = 20
    print(eval("x + y"))
compute()

輸出結(jié)果:

30

globals 作用域

Python 的全局名字空間存儲(chǔ)在一個(gè)叫 globals() 的字典對(duì)象中;局部名字空間存儲(chǔ)在一個(gè)叫 locals() 的字典對(duì)象中。我們可以用 print () 來(lái)查看該函數(shù)體內(nèi)的所有變量名和變量值。

x = 100
y = 200
def compute():
    x = 10
    y = 20
    print(globals())
    print(locals())
compute()

輸出結(jié)果:

{'__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}

從結(jié)果可以看到,globals() 的結(jié)果包含了全局變量 'x': 100, 'y': 200 ,而 locals() 則包含的是局部變量 'x': 10, 'y': 20。eval 函數(shù)包含 globals 參數(shù)則會(huì)使用全局作用域下的變量。

x = 100
y = 200
def compute():
    x = 10
    y = 20
    print(eval("x + y", globals()))
    
compute()

輸出結(jié)果:

300

locals 作用域

如果同時(shí)包含 globals 和 locals 參數(shù),則會(huì)優(yōu)先在本地作用域查找,如果本地作用域沒(méi)有,才會(huì)查找全局作用域。

x = 100
def compute():
    y = 20
    print(eval("x + y", globals(), locals()))
compute()

輸出結(jié)果:

120

字符串轉(zhuǎn)換

字符串轉(zhuǎn)換成列表

s = "[[1,2], [3,4], [5,6]]"
print(type(s))
lst = eval(s)
print(type(lst))
print(lst)

輸出結(jié)果:

<class 'str'>
<class 'list'>
[[1, 2], [3, 4], [5, 6]]

字符串轉(zhuǎn)換成字典

s = "{'math': 90, 'chinese': 100}"
print(type(s))
dic = eval(s)
print(type(dic))
print(dic)

輸出結(jié)果:

<class 'str'>
<class 'dict'>
{'math': 90, 'chinese': 100}

字符串轉(zhuǎn)換成元組

s = "([1,2], [3,4], [5,6])"
print(type(s))
tup = eval(s)
print(type(tup))
print(tup)

輸出結(jié)果:

<class 'str'>
<class 'tuple'>
([1, 2], [3, 4], [5, 6])

需要注意的地方

eval() 函數(shù)有安全性問(wèn)題,比如用戶(hù)惡意輸入就會(huì)獲得當(dāng)前目錄文件。

eval("__import__('os').system('dir')")

甚至查看目錄下的所有文件的內(nèi)容:

eval(open(‘filename’).read())

怎么避免安全問(wèn)題?

·自行寫(xiě)檢查函數(shù);

·使用 ast.literal_eval。

以上是Python中eval函數(shù)是什么的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

當(dāng)前標(biāo)題:Python中eval函數(shù)是什么
文章URL:http://www.chinadenli.net/article8/iphsop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作軟件開(kāi)發(fā)建站公司微信小程序外貿(mào)網(wǎng)站建設(shè)外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)