Python學習筆記之exec函式簡析

2021-10-04 07:40:13 字數 2436 閱讀 9353

個人部落格,支援一下唄!

本文首發於ray』s blog

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

***舉乙個簡單的小例子,**如下:

>>

> i =

12>>

> j =

13>>

>

exec

("answer=i*j"

)>>

>

print

("answer is %s"

%answer)

answer is

156

這表明第三句的exec()函式能夠正確地執行python**,並且能將計算結果賦予answer變數,就像真正的python**一樣。

那麼,我們能不能讓exec()函式執行乙個複雜的python**呢?why not?請看一下例子:

>>

> func =

"def fact(n):\n\treturn 1 if n==1 else n*fact(n-1)"

>>

>

exec

(func)

>>

> a = fact(5)

>>

>

print

(a)120

可能有些讀者納了悶了,這些**不是直接能夠在python中執行嗎,為何還要多此一舉地把它寫成字串,並用exec()執行呢?筆者的答案是,剛才的例子只是為了演示exec()函式的基本用法,它的強大之處遠不止於此。

在實際專案中,我們有些時候會將python**寫入一些檔案中,舉個例子,如以下的eg.txt,它儲存了我們想要的python**,如下:

>>

>

deffact

(n):

if n==1:

return

1else

:return n*fact(n-1)

...>>

> t = fact(6)

>>

>

print

(t)

請再次注意,這是乙個txt格式的python**。那麼,我們如何呼叫它呢?答案就是exec()函式,**如下:

>>

>

with

open

('e:'

,'r'

)as f:

s = f.read().

..>>

>

exec

(s)720

在上述**中,我們先讀取eg.txt檔案的內容,再轉交exec()函式執行。

>>

> x =

10>>

> expr =

""" z = 30

sum = x + y + z

print(sum)

"""..

.>>

>

deffunc()

: y =

20exec

(expr)

exec

(expr,

)exec

(expr,,)

...>>

> func()60

3334

在expr語句中,有三個變數x,y,z,其中z值已給定,我們可以在exec()函式外指定x,y的值,也可以在exec()函式中以字典的形式指定x,y的值。在最後的語句中,我們給出了x,y,z的值,並且y值重複,exec()函式接收後面乙個y值,且z值傳遞不起作用,因此輸出結果為34。

exec()函式的標準格式如下:

exec

(object[,

globals[,

locals]]

)

這個函式支援動態執行 python **。object 必須是字串或者**物件。如果是字串,那麼該字串將被解析為一系列 python 語句並執行(除非發生語法錯誤)。1 如果是**物件,它將被直接執行。在任何情況下,被執行的**都需要和檔案輸入一樣是有效的(見參考手冊中關於檔案輸入的章節)。請注意即使在傳遞給 exec() 函式的**的上下文中,return 和 yield 語句也不能在函式定義之外使用。該函式返回值是 none 。

exec和eval都可以執行single mode的**;exec只是計算表示式,本身返回為none,因此使用exec計算表示式雖然可以計算出結果,但是返回值為none。而eval只能執行單個的表示式,返回表示式的結果。

Python基礎學習篇 exec

exec語句 exec語句用來執行儲存在字串或者檔案中的python語句。可以生成乙個包含python 的字串,然後使用exec語句執行這些語句。exec print hello word hello world exec語句的用法和eval r execfile 是不一樣的,exec是乙個語句,而...

exec族函式學習筆記

o exec族函式 為什麼使用exec族函式?讓乙個程序要執行另乙個不同的程式。在fork建立乙個新程序後,呼叫exec族函式來讓新程序執行其他程式。exec族函式 execl,execlp,execle,execv,execvp,execvpe 呼叫失敗時返回 1,並從呼叫點繼續往下執行。exec...

Python學習筆記之IF

關係表示式 邏輯表示式 and,or,not 單分支 num 0 if num 1 print num 大於 1 else print num 不大於1 雙分支 num 10 if num 1 print num 大於 10 elif num 10 print num 等於 10 elif num ...