国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

解析Python中的eval()、exec()及其相關函數

2020-02-16 11:11:00
字體:
來源:轉載
供稿:網友

剛好前些天有人提到eval()與exec()這兩個函數,所以就翻了下Python的文檔。這里就來簡單說一下這兩個函數以及與它們相關的幾個函數,如globals()、locals()和compile():

1. eval函數

函數的作用:

計算指定表達式的值。也就是說它要執行的Python代碼只能是單個運算表達式(注意eval不支持任意形式的賦值操作),而不能是復雜的代碼邏輯,這一點和lambda表達式比較相似。

函數定義:

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

參數說明:

    expression:必選參數,可以是字符串,也可以是一個任意的code對象實例(可以通過compile函數創建)。如果它是一個字符串,它會被當作一個(使用globals和locals參數作為全局和本地命名空間的)Python表達式進行分析和解釋。 globals:可選參數,表示全局命名空間(存放全局變量),如果被提供,則必須是一個字典對象。 locals:可選參數,表示當前局部命名空間(存放局部變量),如果被提供,可以是任何映射對象。如果該參數被忽略,那么它將會取與globals相同的值。 如果globals與locals都被忽略,那么它們將取eval()函數被調用環境下的全局命名空間和局部命名空間。

返回值:

    如果expression是一個code對象,且創建該code對象時,compile函數的mode參數是'exec',那么eval()函數的返回值是None; 否則,如果expression是一個輸出語句,如print(),則eval()返回結果為None; 否則,expression表達式的結果就是eval()函數的返回值;

實例:

x = 10def 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()

輸出結果:

a:  30
b:  3
c:  4
10 20
d:  None

對輸出結果的解釋:

    對于變量a,eval函數的globals和locals參數都被忽略了,因此變量x和變量y都取得的是eval函數被調用環境下的作用域中的變量值,即:x = 10, y = 20,a = x + y = 30 對于變量b,eval函數只提供了globals參數而忽略了locals參數,因此locals會取globals參數的值,即:x = 1, y = 2,b = x + y = 3 對于變量c,eval函數的globals參數和locals都被提供了,那么eval函數會先從全部作用域globals中找到變量x, 從局部作用域locals中找到變量y,即:x = 1, y = 3, c = x + y = 4 對于變量d,因為print()函數不是一個計算表達式,沒有計算結果,因此返回值為None

2. exec函數

函數的作用:

動態執行Python代碼。也就是說exec可以執行復雜的Python代碼,而不像eval函數那么樣只能計算一個表達式的值。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新田县| 梅州市| 廉江市| 诸暨市| 资源县| 雷山县| 宁阳县| 新竹市| 六盘水市| 句容市| 郎溪县| 巩义市| 个旧市| 北辰区| 石台县| 荔浦县| 长沙市| 晴隆县| 康马县| 什邡市| 龙口市| 常德市| 鸡东县| 清丰县| 政和县| 尖扎县| 时尚| 南澳县| 深圳市| 合作市| 安新县| 珲春市| 肥乡县| 宣城市| 湾仔区| 香港 | 兴文县| 寿阳县| 朝阳市| 日喀则市| 霍山县|