eval(expression[,globals[,locals]])
expression----表達(dá)式
globals----變量作用域,全局命名空間,如果被提供,則必須是一個(gè)字典對(duì)象
locals----變量作用域,局部命名空間,如果被提供,可以是任何映射對(duì)象。
返回值----返回表達(dá)式計(jì)算結(jié)果
>>>x = 7>>> eval( '3 * x' )21>>> eval('pow(2,2)')4>>> eval('2 2')4>>> n=81>>> eval("n 4")85
python是用命名空間來(lái)記錄變量的運(yùn)行狀態(tài)的,命名空間是一個(gè)dictionary型的對(duì)象,鍵是變量名,值是變量值。
在任何一個(gè)python的程序當(dāng)中,都存在多個(gè)命名空間。
每個(gè)函數(shù)都有著自已的命名空間,叫做局部空間,它記錄了函數(shù)的變量,包括函數(shù)的參數(shù)和局部定義的變量。
每個(gè)模塊擁有它自已的命名空間,叫做全局空間,它記錄了模塊的變量,包括函數(shù)、類、其它導(dǎo)入的模塊、模塊級(jí)的變量和常量。還有就是內(nèi)置空間, 任何模塊均可訪問(wèn)它,它存放著內(nèi)置的函數(shù)和異常。
python的全局空間存儲(chǔ)在一個(gè)叫 globals() 的dict對(duì)象中;局部名字空間存儲(chǔ)在一個(gè)叫 locals() 的dict對(duì)象中。可以用print (locals())來(lái)查看該函數(shù)體內(nèi)的所有變量名和變量值。
在globals和locals兩個(gè)參數(shù)為空時(shí),很好理解,expression就是一個(gè)str的表達(dá)式。eval()此時(shí)得到的就是該表達(dá)式的結(jié)果。
當(dāng)locals參數(shù)為空,globals參數(shù)不為空時(shí),先查找globals參數(shù)中是否存在變量,并計(jì)算。當(dāng)兩個(gè)參數(shù)都不為空時(shí),先查找locals參數(shù),再查找globals參數(shù)。
print(eval("{'age':29,'name':name}",{"name":'小白piao'}))#輸出結(jié)果:{'age': 29, 'name': '小白piao'}
age = 29print(eval("{'name':name,'age':age}",{"name":"小白piao"},locals()))#輸出結(jié)果為:{'name': '小白piao', 'age': 29}
聯(lián)系客服