新聞中心

eval函數(shù)的使用方法
函數(shù)的作用:
計(jì)算指定表達(dá)式的值。也就是說(shuō)它要執(zhí)行的python代碼只能是單個(gè)運(yùn)算表達(dá)式(注意eval不支持任意形式的賦值操作),而不能是復(fù)雜的代碼邏輯,這一點(diǎn)和lambda表達(dá)式比較相似。
函數(shù)定義:
eval(expression, globals=None, locals=None)
參數(shù)說(shuō)明:
expression:必選參數(shù),可以是字符串,也可以是一個(gè)任意的code對(duì)象實(shí)例(可以通過(guò)compile函數(shù)創(chuàng)建)。如果它是一個(gè)字符串,它會(huì)被當(dāng)作一個(gè)(使用globals和locals參數(shù)作為全局和本地命名空間的)Python表達(dá)式進(jìn)行分析和解釋。
globals:可選參數(shù),表示全局命名空間(存放全局變量),如果被提供,則必須是一個(gè)字典對(duì)象。
locals:可選參數(shù),表示當(dāng)前局部命名空間(存放局部變量),如果被提供,可以是任何映射對(duì)象。如果該參數(shù)被忽略,那么它將會(huì)取與globals相同的值。
如果globals與locals都被忽略,那么它們將取eval()函數(shù)被調(diào)用環(huán)境下的全局命名空間和局部命名空間。
返回值:
如果expression是一個(gè)code對(duì)象,且創(chuàng)建該code對(duì)象時(shí),compile函數(shù)的mode參數(shù)是'exec',那么eval()函數(shù)的返回值是None;
否則,如果expression是一個(gè)輸出語(yǔ)句,如print(),則eval()返回結(jié)果為None;
否則,expression表達(dá)式的結(jié)果就是eval()函數(shù)的返回值。
實(shí)例:
x = 10
def func():
y = 20
a = eval('x + y')
print('a: ', a)
b = eval('x + y', {'x': 1, 'y': 2})
print('b: ', b)
c = eval('x + y', {'x': 1, 'y': 2}, {'y': 3, 'z': 4})
print('c: ', c)
d = eval('print(x, y)')
print('d: ', d)
func()
輸出結(jié)果:
對(duì)于變量a,eval函數(shù)的globals和locals參數(shù)都被忽略了,因此變量x和變量y都取得的是eval函數(shù)被調(diào)用環(huán)境下的作用域中的變量值,即:x = 10, y = 20,a = x + y = 30。
對(duì)于變量b,eval函數(shù)只提供了globals參數(shù)而忽略了locals參數(shù),因此locals會(huì)取globals參數(shù)的值,即:x = 1, y = 2,b = x + y = 3
對(duì)于變量c,eval函數(shù)的globals參數(shù)和locals都被提供了,那么eval函數(shù)會(huì)先從全部作用域globals中找到變量x, 從局部作用域locals中找到變量y,即:x = 1, y = 3, c = x + y = 4。
對(duì)于變量d,因?yàn)閜rint()函數(shù)不是一個(gè)計(jì)算表達(dá)式,沒(méi)有計(jì)算結(jié)果,因此返回值為None。
python學(xué)習(xí)網(wǎng),大量的免費(fèi)python視頻教程,歡迎在線學(xué)習(xí)!
本文題目:創(chuàng)新互聯(lián)Python教程:pythoneval()怎么用
URL地址:http://www.dlmjj.cn/article/ccddheo.html


咨詢
建站咨詢
