個人部落格,支援一下唄!本文首發於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 ...