Python中 神奇又難搞的eval和exec

2021-10-01 07:35:00 字數 2617 閱讀 1613

exec:可以執行字串中的python**

動態執行python**。也就是說exec可以執行複雜的python**,而不像eval函式那樣只能計算乙個表示式的值。

exec(source, globals=none, locals=none, /)

source:必選引數,表示需要被指定的python**。它必須是字串或code物件。如果source是乙個字串,該字串會先被解析為一組python語句,然後執行。如果source是乙個code物件,那麼它只是被簡單的執行。

globals:可選引數,表示全域性命名空間(存放全域性變數),如果被提供,則必須是乙個字典物件。

locals:可選引數,表示全域性命名空間(存放區域性變數),如果被提供,可以是任何對映物件。如果引數被忽略,那麼它將會取與globals相同的值。

如果globals與locals都被忽略,那麼它們將取eval()函式被呼叫環境下的全域性命名空間和區域性命名空間

返回值

exec函式的返回值永遠為none

此處插入乙個重要文獻,可用來深入理解exec:進入

eval:執行字串裡的表示式(加減乘除等各種表示式)。計算指定表示式的值。也就是說它要執行的python**只能是單個表示式(注意eval不支援任何形式的賦值操作),而不能是複雜的**邏輯

eval(source, globals=none, locals=none, /)

返回值

如果source是乙個code物件,且建立該code物件時,complie函式的mode引數是『exec』,那麼eval()函式的返回值是none;

否則,如果source是乙個輸出語句,如print(),則eval()返回結果為none;

否則,source表示式的結果就是eval()函式的返回值

例項

3.complie函式

函式的作用:

compile(source, filename, mode, flags=0, dont_inherit=false, optimize=-1)

引數說明

source:字串或ast物件,表示需要進行編譯的python**

filename:指定需要編譯的**檔案,如果不是檔案讀取**則傳遞一些可辨認的值。

mode:用於標識必須當做那類代表來編譯;如果source是由乙個**語句序列組成,則指定mode=『exec』,如果source由單個表示式組成,則指定mode=『eval』;如果source是由乙個單獨的互動式語句組成,則指定modo=『single』。必須要制定,不然肯定會報錯。

例子:

s =

""" #一大段**

for x in range(10):

print(x, end='')

print()

"""code_exec =

compile

(s,''

,'exec'

)#必須要指定mode,指定錯了和不指定就會報錯。

code_eval =

compile

('10 + 20',''

,'eval'

)#單個表示式

code_single =

compile

('name = input("input your name: ")',''

,'single'

)#互動式

a =exec

(code_exec) 使用的exec,因此沒有返回值

b =eval

(code_eval)

c =exec

(code_single) 互動

d =eval

(code_single)

print

('a: '

, a)

print

('b: '

, b)

print

('c: '

, c)

print

('name: '

, name)

print

('d: '

, d)

print

('name; '

, name)

執行結果:

0123456789

#有print就會列印

input your name: kebi

input your name: kebi

a:none

b:30

c:none

name: kebi

d:none

name; kebi

python中eval的用法

eval 用於執行乙個字串的表示式,並返回表示式的值 eval expression,globals none,locals none 官方文件中的解釋是,將字串str當成有效的表示式來求值並返回計算結果。globals和locals引數是可選的,如果提供了globals引數,那麼它必須是dicti...

python中的eval函式

eval 函式用來執行乙個字串表示式,並返回表示式的值。還可以把字串轉化為list tuple dict。eval函式的語法 eval expression globals locals 引數 expression 表示式。globals 變數作用域,如果被提供,必須是乙個字典物件。locals 變...

Python中的eval函式

一 簡介 eval函式就是實現list dict tuple與str之間的轉化,而str函式實現把list dict tuple轉換成字串 1 字串轉化為列表 1 字串轉化為列表 2 a 1,2 3,4 5,6 7,8 9,10 3 print type a 4 b eval a 5print ty...