eval()函數(shù)1.函數(shù)原型:eval(expression[,globals[,locals]])
expression----表達式 globals----變量作用域,全局命名空間,如果被提供,則必須是一個字典對象 locals----變量作用域,局部命名空間,如果被提供,可以是任何映射對象。 返回值----返回表達式計算結(jié)果 2.實例:>>>x = 7
>>> eval( '3 * x' )
21
>>> eval('pow(2,2)')
4
>>> eval('2 2')
4
>>> n=81
>>> eval("n 4")
85
3.命名空間 python是用命名空間來記錄變量的運行狀態(tài)的,命名空間是一個dictionary型的對象,鍵是變量名,值是變量值。 在任何一個python的程序當中,都存在多個命名空間。 每個函數(shù)都有著自已的命名空間,叫做局部空間,它記錄了函數(shù)的變量,包括函數(shù)的參數(shù)和局部定義的變量。 每個模塊擁有它自已的命名空間,叫做全局空間,它記錄了模塊的變量,包括函數(shù)、類、其它導(dǎo)入的模塊、模塊級的變量和常量。還有就是內(nèi)置空間, 任何模塊均可訪問它,它存放著內(nèi)置的函數(shù)和異常。 python的全局空間存儲在一個叫 globals() 的dict對象中;局部名字空間存儲在一個叫 locals() 的dict對象中??梢杂?mark>print (locals())來查看該函數(shù)體內(nèi)的所有變量名和變量值。 4.參數(shù): 在globals和locals兩個參數(shù)為空時,很好理解,expression就是一個str的表達式。eval()此時得到的就是該表達式的結(jié)果。 當locals參數(shù)為空,globals參數(shù)不為空時,先查找globals參數(shù)中是否存在變量,并計算。當兩個參數(shù)都不為空時,先查找locals參數(shù),再查找globals參數(shù)。 5.關(guān)于locals和globals兩個參數(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}
|