小編給大家分享一下python中eval和exec有什么不一樣,相信大部分人都還不怎么了解,因此分享這篇文章給大家學(xué)習(xí),希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去學(xué)習(xí)方法吧!
創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括郯城網(wǎng)站建設(shè)、郯城網(wǎng)站制作、郯城網(wǎng)頁制作以及郯城網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,郯城網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到郯城省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
1、eval函數(shù)
函數(shù)的作用:
計算指定表達(dá)式的值。也就是說它要執(zhí)行的Python代碼只能是單個運(yùn)算表達(dá)式(注意eval不支持任意形式的賦值操作),而不能是復(fù)雜的代碼邏輯,這一點(diǎn)和lambda表達(dá)式比較相似。
函數(shù)定義:
eval(expression, globals=None, locals=None)
參數(shù)說明:
expression:必選參數(shù),可以是字符串,也可以是一個任意的code對象實(shí)例(可以通過compile函數(shù)創(chuàng)建)。如果它是一個字符串,它會被當(dāng)作一個(使用globals和locals參數(shù)作為全局和本地命名空間的)Python表達(dá)式進(jìn)行分析和解釋。
globals:可選參數(shù),表示全局命名空間(存放全局變量),如果被提供,則必須是一個字典對象。
locals:可選參數(shù),表示當(dāng)前局部命名空間(存放局部變量),如果被提供,可以是任何映射對象。如果該參數(shù)被忽略,那么它將會取與globals相同的值。
如果globals與locals都被忽略,那么它們將取eval()函數(shù)被調(diào)用環(huán)境下的全局命名空間和局部命名空間。
返回值:
如果expression是一個code對象,且創(chuàng)建該code對象時,compile函數(shù)的mode參數(shù)是'exec',那么eval()函數(shù)的返回值是None;
否則,如果expression是一個輸出語句,如print(),則eval()返回結(jié)果為None;
否則,expression表達(dá)式的結(jié)果就是eval()函數(shù)的返回值;
2、exec函數(shù)
函數(shù)的作用:
動態(tài)執(zhí)行Python代碼。也就是說exec可以執(zhí)行復(fù)雜的Python代碼,而不像eval函數(shù)那么樣只能計算一個表達(dá)式的值。
函數(shù)定義:
exec(object[, globals[, locals]])
參數(shù)說明:
object:必選參數(shù),表示需要被指定的Python代碼。它必須是字符串或code對象。如果object是一個字符串,該字符串會先被解析為一組Python語句,然后在執(zhí)行(除非發(fā)生語法錯誤)。如果object是一個code對象,那么它只是被簡單的執(zhí)行。
globals:可選參數(shù),同eval函數(shù)
locals:可選參數(shù),同eval函數(shù)
返回值:
exec函數(shù)的返回值永遠(yuǎn)為None.
需要說明的是在Python 2中exec不是函數(shù),而是一個內(nèi)置語句(statement),但是Python 2中有一個execfile()函數(shù)??梢岳斫鉃镻ython 3把exec這個statement和execfile()函數(shù)的功能夠整合到一個新的exec()函數(shù)中去了。
Eval()函數(shù)與exec函數(shù)的區(qū)別
eval()函數(shù)只能計算單個表達(dá)式的值,而exec()函數(shù)可以動態(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)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!