溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python中eval和exec有什么不一樣

發(fā)布時(shí)間:2020-08-04 14:45:39 來源:億速云 閱讀:215 作者:清晨 欄目:編程語言

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

1、eval函數(shù)

函數(shù)的作用:

計(jì)算指定表達(dá)式的值。也就是說它要執(zhí)行的Python代碼只能是單個(gè)運(yùn)算表達(dá)式(注意eval不支持任意形式的賦值操作),而不能是復(fù)雜的代碼邏輯,這一點(diǎn)和lambda表達(dá)式比較相似。

函數(shù)定義:

eval(expression, globals=None, locals=None)

參數(shù)說明:

expression:必選參數(shù),可以是字符串,也可以是一個(gè)任意的code對(duì)象實(shí)例(可以通過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è)輸出語句,如print(),則eval()返回結(jié)果為None;

否則,expression表達(dá)式的結(jié)果就是eval()函數(shù)的返回值;

2、exec函數(shù)

函數(shù)的作用:

動(dòng)態(tài)執(zhí)行Python代碼。也就是說exec可以執(zhí)行復(fù)雜的Python代碼,而不像eval函數(shù)那么樣只能計(jì)算一個(gè)表達(dá)式的值。

函數(shù)定義:

exec(object[, globals[, locals]])

參數(shù)說明:

object:必選參數(shù),表示需要被指定的Python代碼。它必須是字符串或code對(duì)象。如果object是一個(gè)字符串,該字符串會(huì)先被解析為一組Python語句,然后在執(zhí)行(除非發(fā)生語法錯(cuò)誤)。如果object是一個(gè)code對(duì)象,那么它只是被簡單的執(zhí)行。

globals:可選參數(shù),同eval函數(shù)

locals:可選參數(shù),同eval函數(shù)

返回值:

exec函數(shù)的返回值永遠(yuǎn)為None.

需要說明的是在Python 2中exec不是函數(shù),而是一個(gè)內(nèi)置語句(statement),但是Python 2中有一個(gè)execfile()函數(shù)。可以理解為Python 3把exec這個(gè)statement和execfile()函數(shù)的功能夠整合到一個(gè)新的exec()函數(shù)中去了。

Eval()函數(shù)與exec函數(shù)的區(qū)別

eval()函數(shù)只能計(jì)算單個(gè)表達(dá)式的值,而exec()函數(shù)可以動(dòng)態(tài)運(yùn)行代碼段。

eval()函數(shù)可以有返回值,而exec()函數(shù)返回值永遠(yuǎn)為None。

eval:

可以把字符串里的字符轉(zhuǎn)換為可執(zhí)行代碼,但只支持一行字符??梢苑祷貓?zhí)行后得到的值。如下:

f = "3+6+9+8"
s = eval(f)
print(s)

輸出:

"C:\Program Files\python3\python3.exe" D:/codes_py3/luhy_tool/string_utils/mymethod.py
26

exec:

可以把字符串里的字符轉(zhuǎn)換為可執(zhí)行代碼,可以支持多行字符。但是拿不到返回結(jié)果。如下:

code = '''
def func():
    print('test')
    return 555
func()
'''
 
f = exec(code)
print('---'*5)
print(f)

 輸出:

"C:\Program Files\python3\python3.exe" D:/codes_py3/luhy_tool/string_utils/mymethod.py
test
---------------
None

以上是python中eval和exec有什么不一樣的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI