eval函式
一、函式的作用
將字串str當成有效的表示式來求值並返回計算結果。它要執行的
python
**只能是單個運算表示式(不支援任意形式的賦值操作),而不能是複雜的**邏輯。
二、函式的定義
eval(expression, globals=none, locals=none)
引數說明:
expression:必選引數,可以是字串,也可以是乙個任意的code物件例項(可以通過
compile
函式建立)。如果它是乙個字串,它會被當作乙個
python
表示式進行分析和解釋。
globals:可選引數,表示全域性命名空間(存放全域性變數),如果被提供,則必須是乙個字典物件。
locals:可選引數,表示當前區域性命名空間(存放區域性變數),如果被提供,可以是任何對映物件。如果該引數被忽略,那麼它將會取與
globals
相同的值。
如果globals與
locals
都被忽略,那麼它們將取
eval()
函式被呼叫環境下的全域性命名空間和區域性命名空間。
返回值:
如果expression是乙個
code
物件,且建立該
code
物件時,
compile
函式的mode
引數是』exec』,那麼eval()函式的返回值是
none
否則,如果expression是乙個輸出語句,如
print()
,則eval()
返回結果為
none
否則,expression表示式的結果就是
eval()
函式的返回值
三、舉幾個栗子
(1)計算字串中有效的表示式,並返回結果
>>> eval('pow(2,2)')
4>>> eval('2 + 2')
4
(2)將字串轉成相應的物件(如list、
tuple
、dict
和string
之間的轉換)
>>> a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
>>> b = eval(a)
>>> b
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
>>> a = ""
>>> c = eval(a)
>>> c
>>> a = "(1,2,3,4)"
>>> d = eval(a)
>>> d
(1, 2, 3, 4)
(3)更改變數值
x = 10
def func():
y = 20
a = eval('x+y')
print "a=", a
b = eval('x+y', )
print "b=", b
c = eval('x+y', , )
print "c=", c
func()
輸出:
a= 30
b= 3
c= 4
exec函式
一、函式的作用
動態執行python**,可以執行複雜的
python
**二、函式定義
exec(object[, globals[, locals]]]
引數說明:
object:必選引數,表示需要被指定的
python
**,它必須是字串或
code
物件。如果
object
是乙個字串,該字串會被先解析為一組
python
語句,然後再執行。如果
object
是乙個code
物件,那麼它只是被簡單的執行
globals:可選引數,同
eval
函式locals:可選引數,同
eval
函式返回值:
exec函式的返回值永遠為
none
三、栗子
(1)例項
1
因為exec返回值是
none
所以 a = exec(『x+y』),這條**會報錯。
改為exec(『x+y』),可以正常執行
而d = eval(『print(x,y)』),這條**會報錯
改為d = exec(『print(x,y)』),可以正常執行
(2)例項2
x = 10
expr = """
z = 30
sum = x+y+z
print (sum)
"""def func():
y = 20
exec (expr)
exec (expr, )
exec (expr, , )
func()
輸出: 60
33 34
針對最後一條結果的輸出,為什麼z是
30不是
4,梳理一下執行過程如下:
x=1
y=2def func():
y=3z=4
z=30
sum=x+y+z
print(sum)
func()
eval()函式與
exec()
函式的區別:
eval()函式只能計算單個表示式的值,而
exec()
函式可以動態執行**段
eval()函式可以有返回值,而
exec()
函式返回值永遠為
none
Python中的eval exec 函式
先說一下我的應用場景 寫了乙個測試用例類,現在想按順序執行,又不想多寫 就應用到了python的eval 和exec 函式 關於這兩個函式的區別請參考 現在上我的 1 class case 2 3測試用例類 4 5def case1 self 6print case1 78defcase2 self...
python的包 python的包
1.把解決一類問題的模組放在同乙個資料夾裡,這個資料夾就是包 2.通過import或是from.import匯入時必須遵循乙個原則 a 凡是在匯入時帶點的,點的左邊都必須是乙個包,否則非法 b 匯入後,使用時點的左邊可以是包,模組,類,函式 它們都可以用點的方式調節用自己的屬性 c from.imp...
python的語句 Python的語句
python中的兩種語句 1 if條件控制語句 格式 if a int input 請輸入第乙個數 b int input 請輸入第二個數 if a b print a比b小 if else a int input 請輸入第乙個數 b int input 請輸入第二個數 if a b print a...