摘要:本次分享講簡單聊聊函數(shù)的用法,希望能給讀者一點(diǎn)啟示和參考。在最后的語句中,我們給出了的值,并且值重復(fù),函數(shù)接收后面一個(gè)值,且值傳遞不起作用,因此輸出結(jié)果為本次分享到此結(jié)束。本文介紹了幾個(gè)函數(shù)使用的例子,希望能拋磚引玉,也歡迎大家多多交流
??在Python中,exec()是一個(gè)十分有趣且實(shí)用的內(nèi)置函數(shù),不同于eval()函數(shù)只能執(zhí)行計(jì)算數(shù)學(xué)表達(dá)式的結(jié)果的功能,exec()能夠動態(tài)地執(zhí)行復(fù)雜的Python代碼,能夠十分強(qiáng)大。具體的介紹可以參考官方文檔: https://docs.python.org/3/lib... 。
??本次分享講簡單聊聊exec()函數(shù)的用法,希望能給讀者一點(diǎn)啟示和參考。
??首先是一個(gè)簡單的小例子,代碼如下:
i = 12 j = 13 exec("answer=i*j") print("Answer is %s"%answer)
該代碼的輸出結(jié)果為:
Answer is 156
這表明第三句的exec()函數(shù)能夠正確地執(zhí)行Python代碼,并且能將計(jì)算結(jié)果賦予answer變量,就像真正的Python代碼一樣。
??那么,我們能不能讓exec()函數(shù)執(zhí)行一個(gè)復(fù)雜的Python代碼呢?Why not?請看一下例子:
func = "def fact(n): return 1 if n==1 else n*fact(n-1)" exec(func) a = fact(5) print(a)
func為字符串,它是一個(gè)遞歸地計(jì)算整數(shù)階乘的函數(shù)。因?yàn)閑xec()僅支持string和code object參數(shù),所以我們要將該遞歸函數(shù)轉(zhuǎn)化成一個(gè)字符串,當(dāng)然,格式還是要Python代碼的格式來,注意換行和縮進(jìn)。剛才例子的輸出結(jié)果為:
120
??可能有些讀者納了悶了,這些代碼不是直接能夠在Python中執(zhí)行嗎,為何還要多此一舉地把它寫成字符串,并用exec()執(zhí)行呢?筆者的答案是,剛才的例子只是為了演示exec()函數(shù)的基本用法,它的強(qiáng)大之處遠(yuǎn)不止于此。
??在實(shí)際項(xiàng)目中,我們有些時(shí)候會將Python代碼寫入一些文件中,舉個(gè)例子,如以下的eg.txt,它儲存了我們想要的Python代碼,如下:
def fact(n): if n==1: return 1 else: return n*fact(n-1) t = fact(6) print(t)
請?jiān)俅巫⒁猓@是一個(gè)txt格式的Python代碼。那么,我們?nèi)绾握{(diào)用它呢?答案就是exec()函數(shù),代碼如下:
with open("E://eg.txt", "r") as f: s = f.read() exec(s)
在上述代碼中,我們先讀取eg.txt文件的內(nèi)容,再轉(zhuǎn)交exec()函數(shù)執(zhí)行,輸出結(jié)果如下:
720
??是不是有點(diǎn)棒呢?除了能執(zhí)行string和code object外,還可以在exec()函數(shù)中加入?yún)?shù),參數(shù)的傳遞可以寫成字典(dict)形式。具體的使用方法可以參考下面的例子:
x = 10 expr = """ z = 30 sum = x + y + z print(sum) """ def func(): y = 20 exec(expr) exec(expr, {"x": 1, "y": 2}) exec(expr, {"x": 1, "y": 2}, {"y": 3, "z": 4}) func()
其輸出結(jié)果如下:
60
33
34
在expr語句中,有三個(gè)變量x,y,z,其中z值已給定,我們可以在exec()函數(shù)外指定x,y的值,也可以在exec()函數(shù)中以字典的形式指定x,y的值。在最后的語句中,我們給出了x,y,z的值,并且y值重復(fù),exec()函數(shù)接收后面一個(gè)y值,且z值傳遞不起作用,因此輸出結(jié)果為34.
??本次分享到此結(jié)束。本文介紹了幾個(gè)exec()函數(shù)使用的例子,希望能拋磚引玉,也歡迎大家多多交流~~
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/41580.html
摘要:毫無疑問,作為近兩年前端三大流行框架之一,正成為程序員們最喜愛的框架。自年月開源至今,已有千萬網(wǎng)站使用來進(jìn)行前端構(gòu)架,使之成為最受歡迎的項(xiàng)目之一。經(jīng)過這幾年的沉淀,越來越強(qiáng)大,暫不提這幾年在國內(nèi)與之間的矛盾,這其中還有很大談判空間。 showImg(https://segmentfault.com/img/bV0dY9?w=469&h=240); React在國外已被各個(gè)公司的各種產(chǎn)品...
摘要:用匿名函數(shù)有個(gè)好處,因?yàn)楹瘮?shù)沒有名字,不必?fù)?dān)心函數(shù)名沖突。和不同的是,把傳入的函數(shù)依次作用于每個(gè)元素,然后根據(jù)返回值是還是決定保留還是丟棄該元素。字符串給出當(dāng)前平臺使用的行終止符。程序中間的退出,為正常退出。 列表生成式 函數(shù)的參數(shù)類型 lambda函數(shù) map, reduce, filter, sorted函數(shù) eval, exec, join, zip函數(shù) itertools中的...
摘要:還有很多開發(fā)者沒有意識到的加密算法的問題。不要使用哈希函數(shù)做為對稱加密算法的簽名。開發(fā)者建議使用基于口令的加密算法時(shí),生成密鑰時(shí)要加鹽,鹽的取值最好來自,并指定迭代次數(shù)。不要使用沒有消息認(rèn)證的加密算法加密消息,無法防重放。 本文作者:阿里移動安全@伊樵,@舟海 Android開發(fā)中,難免會遇到需要加解密一些數(shù)據(jù)內(nèi)容存到本地文件、或者通過網(wǎng)絡(luò)傳輸?shù)狡渌?wù)器和設(shè)備的問題,但并不是使用了加...
閱讀 3014·2021-11-16 11:42
閱讀 3651·2021-09-08 09:36
閱讀 950·2019-08-30 12:52
閱讀 2481·2019-08-29 14:12
閱讀 769·2019-08-29 13:53
閱讀 3583·2019-08-29 12:16
閱讀 644·2019-08-29 12:12
閱讀 2469·2019-08-29 11:16