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