python——eval():返回傳入字符串的表達式的結果


eval是Python的一個內置函數,這個函數的作用是,返回傳入字符串的表達式的結果。即變量賦值時,等號右邊的表示是寫成字符串的格式,返回值就是這個表達式的結果。

 

語法

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

expression : 表達式。

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

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

命名空間:

python是用命名空間來記錄變量的軌跡的,命名空間是一個dictionary,鍵是變量名,值是變量值。

在一個 Python 程序中的任何一個地方,都存在幾個可用的名字空間。每個函數都有着自已的名字空間,叫做局部名字空間,它記錄了函數的變量,包括函數的參數和局部定義的變 量。

每個模塊擁有它自已的名字空間,叫做全局名字空間,它記錄了模塊的變量,包括函數、類、其它導入的模塊、模塊級的變量和常量。還有就是內置名字空間, 任何模塊均可訪問它,它存放着內置的函數和異常。

python的全局名字空間存儲在一個叫globals()的dict對象中;局部名字空間存儲在一個叫locals()的dict對象中。可以用print (locals())來查看該函數體內的所有變量名和變量值。

 

參數查找:

當后兩個參數都為空時,很好理解,就是一個string類型的算術表達式,計算出結果即可。等價於eval(expression)。

 

當locals參數為空,globals參數不為空時,先查找globals參數中是否存在變量,並計算。

 

當兩個參數都不為空時,先查找locals參數,再查找globals參數。

 

例子:

1、簡單表達式

print(eval('1+2'))
輸出結果:3

2、字符串轉字典
print(eval("{'name':'linux','age':18}")
輸出結果:{'name':'linux','age':18}

3、傳遞全局變量
print(eval("{'name':'linux','age':age}",{"age":1822}))
輸出結果:{'name': 'linux', 'age': 1822}

4、傳遞本地變量
age=18
print(eval("{'name':'linux','age':age}",{"age":1822},locals()))
輸出結果:{'name': 'linux', 'age': 18}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM