本篇內(nèi)容主要講解“Python中用函數(shù)還是用復(fù)雜的表達(dá)式”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Python中用函數(shù)還是用復(fù)雜的表達(dá)式”吧!
按需網(wǎng)站開發(fā)可以根據(jù)自己的需求進(jìn)行定制,網(wǎng)站建設(shè)、網(wǎng)站制作構(gòu)思過程中功能建設(shè)理應(yīng)排到主要部位公司網(wǎng)站建設(shè)、網(wǎng)站制作的運(yùn)用實(shí)際效果公司網(wǎng)站制作網(wǎng)站建立與制做的實(shí)際意義Perl語言的原作者Larry Wall曾經(jīng)說過,偉大的程序員都有三個優(yōu)點(diǎn):懶惰、暴躁和自負(fù)。乍一看這三個詞語沒有一個是褒義詞,但在程序員的世界里,這三個詞有不同的意義。首先,懶惰會促使程序員去寫一些省事兒的程序來輔助自己或別人更好的完成工作,這樣我們就無需做那些重復(fù)和繁瑣的勞動;同理能夠用3行代碼解決的事情,我們也絕不會寫出10行代碼來。其次,暴躁會讓程序員主動的去完成一些你還沒有提出的工作,去優(yōu)化自己的代碼讓它更有效率,能夠3秒鐘完成的任務(wù),我們絕不能容忍1分鐘的等待。最后,自負(fù)會促使程序員寫出可靠無誤的代碼,我們寫代碼不是為了接受批評和指責(zé),而是為了讓其他人來膜拜。
那么接下來就有一個很有意思的問題值得探討一下,我們需要一個程序從輸入的三個數(shù)中找出大的那個數(shù)。這個程序?qū)θ魏螘幊痰娜藖碚f都是小菜一碟,甚至不會編程的人經(jīng)過10分鐘的學(xué)習(xí)也能搞定。下面是用來解決這個問題的Python代碼。
a = int(input('a = ')) b = int(input('b = ')) c = int(input('c = ')) if a > b: the_max = a else: the_max = b if c > the_max: the_max = c print('The max is:', the_max)
但是我們剛才說了,程序員都是懶惰的,很多程序員都會使用三元條件運(yùn)算符來改寫上面的代碼。
a = int(input('a = ')) b = int(input('b = ')) c = int(input('c = ')) the_max = a if a > b else b the_max = c if c > the_max else the_max print('The max is:', the_max)
需要說明的是,Python在2.5版本以前是沒有上面代碼第4行和第5行中使用的三元條件運(yùn)算符的,究其原因是Guido van Rossum(Python之父)認(rèn)為三元條件運(yùn)算符并不能幫助 Python變得更加簡潔,于是那些習(xí)慣了在C/C++或Java中使用三元條件運(yùn)算符(在這些語言中,三元條件運(yùn)算符也稱為“Elvis運(yùn)算符”,因?yàn)?:放在一起很像著名搖滾歌手貓王Elvis的大背頭)的程序員試著用and和or運(yùn)算符的短路特性來模擬出三元操作符,于是在那個年代,上面的代碼是這樣寫的。
a = int(input('a = ')) b = int(input('b = ')) c = int(input('c = ')) the_max = a > b and a or b the_max = c > the_max and c or the_max print('The max is:', the_max)
但是這種做法在某些場景下是不能成立的,且看下面的代碼。
a = 0 b = -100 # 下面的代碼本來預(yù)期輸出a的值,結(jié)果卻得到了b的值 # 因?yàn)閍的值0在進(jìn)行邏輯運(yùn)算時會被視為False來處理 print(True and a or b) # print(a if True else b)
所以在Python 2.5以后引入了三元條件運(yùn)算符來避免上面的風(fēng)險(xiǎn)(上面代碼被注釋掉的最后一句話)。那么,問題又來了,上面的代碼還可以寫得更簡短嗎?答案是肯定的。
a = int(input('a = ')) b = int(input('b = ')) c = int(input('c = ')) print('The max is:', (a if a > b else b) if (a if a > b else b) > c else c)
但是,這樣做真的好嗎?如此復(fù)雜的表達(dá)式是不是讓代碼變得晦澀了很多呢?我們發(fā)現(xiàn),在實(shí)際開發(fā)中很多開發(fā)者都喜歡過度的使用某種語言的特性或語法糖,于是簡單的多行代碼變成了復(fù)雜的單行表達(dá)式,這樣做真的好嗎?這個問題我也不止一次的問過自己,現(xiàn)在我能給出的答案是下面的代碼,使用輔助函數(shù)。
def the_max(x, y): return x if x > y else y a = int(input('a = ')) b = int(input('b = ')) c = int(input('c = ')) print('The max is:', the_max(the_max(a, b), c))
上面的代碼中,我定義了一個輔助函數(shù)the_max用來找出參數(shù)傳入的兩個值中較大的那一個,于是下面的輸出語句可以通過兩次調(diào)用the_max函數(shù)來找出三個數(shù)中的大值,現(xiàn)在代碼的可讀性是不是好了很多。用輔助函數(shù)來替代復(fù)雜的表達(dá)式真的是一個不錯的選擇,關(guān)鍵是比較大小的邏輯轉(zhuǎn)移到這個輔助函數(shù)后不僅可以反復(fù)調(diào)用它,而且還可以進(jìn)行級聯(lián)操作。
當(dāng)然,很多語言中比較大小的函數(shù)根本沒有必要自己來實(shí)現(xiàn)(通常都是內(nèi)置函數(shù)),Python也是如此。Python內(nèi)置的max函數(shù)利用了Python對可變參數(shù)的支持,允許一次性傳入多個值或者一個迭代器并找出那個大值,所以上面討論的問題在Python中也就是一句話的事,但是從復(fù)雜表達(dá)式到使用輔助函數(shù)簡化復(fù)雜表達(dá)式這個思想是非常值得玩味的,所以分享出來跟大家做一個交流。
a = int(input('a = ')) b = int(input('b = ')) c = int(input('c = ')) print('The max is:', max(a, b, c))
到此,相信大家對“Python中用函數(shù)還是用復(fù)雜的表達(dá)式”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
文章標(biāo)題:Python中用函數(shù)還是用復(fù)雜的表達(dá)式-創(chuàng)新互聯(lián)
URL標(biāo)題:http://jinyejixie.com/article8/djshop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、網(wǎng)站改版、全網(wǎng)營銷推廣、微信公眾號、網(wǎng)站排名、用戶體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容