python的eval exec函式使用總結

2021-08-03 19:18:17 字數 3284 閱讀 1306

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...