91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python:用函數還是用復雜的表達式

發布時間:2020-08-06 18:52:56 來源:ITPUB博客 閱讀:134 作者:千鋒Python唐小強 欄目:編程語言

要不要使用復雜表達式

Perl語言的原作者 Larry Wall曾經說過,偉大的程序員都有三個優點:懶惰、暴躁和自負。乍一看這三個詞語沒有一個是褒義詞,但在程序員的世界里,這三個詞有不同的意義。首先,懶惰會促使程序員去寫一些省事兒的程序來輔助自己或別人更好的完成工作,這樣我們就無需做那些重復和繁瑣的勞動;同理能夠用3行代碼解決的事情,我們也絕不會寫出10行代碼來。其次,暴躁會讓程序員主動的去完成一些你還沒有提出的工作,去優化自己的代碼讓它更有效率,能夠3秒鐘完成的任務,我們絕不能容忍1分鐘的等待。最后,自負會促使程序員寫出可靠無誤的代碼,我們寫代碼不是為了接受批評和指責,而是為了讓其他人來膜拜。

那么接下來就有一個很有意思的問題值得探討一下,我們需要一個程序從輸入的三個數中找出最大的那個數。這個程序對任何會編程的人來說都是小菜一碟,甚至不會編程的人經過10分鐘的學習也能搞定。下面是用來解決這個問題的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)

但是我們剛才說了,程序員都是懶惰的,很多程序員都會使用三元條件運算符來改寫上面的代碼。

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:用函數還是用復雜的表達式

需要說明的是,Python在2.5版本以前是沒有上面代碼第4行和第5行中使用的三元條件運算符的,究其原因是Guido van Rossum(Python之父)認為三元條件運算符并不能幫助 Python變得更加簡潔,于是那些習慣了在C/C++或Java中使用三元條件運算符(在這些語言中,三元條件運算符也稱為“Elvis運算符”,因為?:放在一起很像著名搖滾歌手貓王Elvis的大背頭)的程序員試著用and和or運算符的短路特性來模擬出三元操作符,于是在那個年代,上面的代碼是這樣寫的。

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
# 下面的代碼本來預期輸出a的值,結果卻得到了b的值
# 因為a的值0在進行邏輯運算時會被視為False來處理
print(True and a or b)
# print(a if True else b)

所以在Python 2.5以后引入了三元條件運算符來避免上面的風險(上面代碼被注釋掉的最后一句話)。那么,問題又來了,上面的代碼還可以寫得更簡短嗎?答案是肯定的。

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)

但是,這樣做真的好嗎?如此復雜的表達式是不是讓代碼變得晦澀了很多呢?我們發現,在實際開發中很多開發者都喜歡過度的使用某種語言的特性或語法糖,于是簡單的多行代碼變成了復雜的單行表達式,這樣做真的好嗎?這個問題我也不止一次的問過自己,現在我能給出的答案是下面的代碼,使用輔助函數。

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))

上面的代碼中,我定義了一個輔助函數the_max用來找出參數傳入的兩個值中較大的那一個,于是下面的輸出語句可以通過兩次調用the_max函數來找出三個數中的最大值,現在代碼的可讀性是不是好了很多。用輔助函數來替代復雜的表達式真的是一個不錯的選擇,關鍵是比較大小的邏輯轉移到這個輔助函數后不僅可以反復調用它,而且還可以進行級聯操作。

當然,很多語言中比較大小的函數根本沒有必要自己來實現(通常都是內置函數),Python也是如此。Python內置的max函數利用了Python對可變參數的支持,允許一次性傳入多個值或者一個迭代器并找出那個最大值,所以上面討論的問題在Python中也就是一句話的事,但是從復雜表達式到使用輔助函數簡化復雜表達式這個思想是非常值得玩味的,所以分享出來跟大家做一個交流。

a = int(input('a = '))
b = int(input('b = '))
c = int(input('c = '))
print('The max is:', max(a,

更多的Python學習教程也會繼續為大家更新!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平昌县| 鄯善县| 长治市| 武定县| 两当县| 郎溪县| 霍城县| 黄陵县| 苍南县| 福海县| 石楼县| 资兴市| 运城市| 石台县| 怀集县| 花莲县| 梨树县| 定南县| 江津市| 图木舒克市| 平湖市| 龙岩市| 赤壁市| 漯河市| 自治县| 唐河县| 兰西县| 巩义市| 永泰县| 浑源县| 潼关县| 兴义市| 湛江市| 郯城县| 莆田市| 介休市| 康乐县| 勃利县| 盐池县| 易门县| 万全县|