對于什么是函數(shù),其實(shí)在前面的學(xué)習(xí)過程當(dāng)中,已經(jīng)多次接觸到函數(shù)了,比如在set里面,使用remove()函數(shù)進(jìn)行元素的刪除,使用add()函數(shù)添加元素,使用update()函數(shù)批量添加元素,但是至今為止,我們都沒有對函數(shù)有個(gè)充分的認(rèn)識。本章,我們將具體學(xué)習(xí)函數(shù)。
我們知道圓的面積計(jì)算公式為:
S = πr²
當(dāng)我們知道半徑r的值時(shí),就可以通過公式計(jì)算出面積,假設(shè)我們需要計(jì)算3個(gè)不同大小的圓的面積:
r1 = 12.34 r2 = 9.08 r3 = 73.1 s1 = 3.14 * r1 * r1 s2 = 3.14 * r2 * r2 s3 = 3.14 * r3 * r3
可以看到,在上述代碼中,出現(xiàn)了幾乎完全重復(fù)的代碼,每次計(jì)算圓的面積的時(shí)候我們都是通過3.14*x*x
(其中x是圓的半徑)的方式計(jì)算出來的,這樣寫不僅非常麻煩,而且,當(dāng)我們需要提高圓周率的精度時(shí),把3.14改成3.14159265359的時(shí)候,我們需要修改涉及到的三行代碼。
因此,我們可以使用函數(shù),把重復(fù)的邏輯代碼封裝起來,這樣子,我們就不需要每次計(jì)算的時(shí)候,都寫3.14*x*x
這樣的代碼了;當(dāng)我們使用函數(shù)的時(shí)候,我們只需要定義一次,就可以多次使用。
我們把封裝重復(fù)邏輯代碼的過程就做抽象,抽象是數(shù)學(xué)中非常常見的概念。
比如:計(jì)算數(shù)列的和,比如:1 + 2 + 3 + ... + 100,寫起來十分不方便,于是數(shù)學(xué)家發(fā)明了求和符號∑,可以把1 + 2 + 3 + ... + 100記作:
這種抽象記法非常強(qiáng)大,因?yàn)槲覀兛吹?sum;就可以理解成求和,而不是還原成低級的加法運(yùn)算。
而且,這種抽象記法是可擴(kuò)展的,比如:
還原成加法運(yùn)算就變成了:
(1 x 1 + 1) + (2 x 2 + 1) + (3 x 3 + 1) + ... + (100 x 100 + 1)
可見,借助抽象,我們才能不關(guān)心底層的具體計(jì)算過程,而直接在更高的層次上思考問題。
寫計(jì)算機(jī)程序也是一樣,函數(shù)就是最基本的一種代碼抽象的方式。
Python不但能非常靈活地定義函數(shù),而且本身內(nèi)置了很多有用的函數(shù),可以直接調(diào)用。
Python內(nèi)置了很多有用的函數(shù),我們可以直接調(diào)用。比如前面求list的長度len()函數(shù)等等,都是Python內(nèi)置的函數(shù),我們經(jīng)常會使用到它們。
在這個(gè)文檔里面,列舉了Python內(nèi)置的大部分函數(shù),同學(xué)們有興趣可以參考看看。
https://docs.python.org/3/library/functions.html
要調(diào)用一個(gè)函數(shù),需要知道函數(shù)的名稱和參數(shù),比如求絕對值的函數(shù) abs(),它接收一個(gè)參數(shù)。
對于abs()函數(shù),abs就是函數(shù)的名稱,括號()內(nèi),就是函數(shù)的參數(shù),當(dāng)函數(shù)沒有參數(shù)時(shí),默認(rèn)就是一個(gè)空括號。abs接收一個(gè)參數(shù),這個(gè)參數(shù)就是需要求絕對值的數(shù),這個(gè)參數(shù)可以是整數(shù),也可以是浮點(diǎn)數(shù)
abs(-100) # ==> 100 abs(20) # ==> 20 abs(-3.14159) # ==> 3.14159
需要注意的是,傳遞的參數(shù)數(shù)量一定要和函數(shù)要求的一致,不然將會引起錯(cuò)誤,比如,如果在abs()函數(shù)中傳入兩個(gè)參數(shù)。
abs(1, 2) # 報(bào)錯(cuò) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: abs() takes exactly one argument (2 given)
在錯(cuò)誤提示中,清晰的說明了abs()函數(shù)只接收一個(gè)參數(shù),但是卻傳遞了兩個(gè)參數(shù),所以引起了錯(cuò)誤。
其次,如果傳入的參數(shù)數(shù)量是對的,但是參數(shù)的類型不能被函數(shù)所接受,也會引起錯(cuò)誤,比如:求絕對值的函數(shù)abs(),只有數(shù)字才擁有絕對值,如果傳遞一個(gè)字符串進(jìn)去,將會引起錯(cuò)誤。
abs('3.1415926') # 報(bào)錯(cuò) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: bad operand type for abs(): 'str'
這里錯(cuò)誤提示說,str類型是錯(cuò)誤的參數(shù)類型。
除了abs()函數(shù),還有很多常見的函數(shù),比如cmp()函數(shù),可以比較兩個(gè)數(shù)的大小,這個(gè)時(shí)候,cmp()函數(shù)就接收兩個(gè)參數(shù)。
對于cmp(x, y),如果x < y 返回 -1,如果x == y 函數(shù)返回0,如果x > y函數(shù)返回1。
cmp(1, 2) # ==> -1 cmp(2, 1) # ==> 1 cmp(3, 3) # ==> 0
還有基礎(chǔ)數(shù)據(jù)類型的轉(zhuǎn)換函數(shù),int()函數(shù)可以將合法的其它類型數(shù)據(jù)轉(zhuǎn)換為整數(shù),str()函數(shù)可以將其它類型的數(shù)據(jù)轉(zhuǎn)換為字符串。
int('123') # ==> 123 int(12.34) # ==> 12 str(123) # ==> '123' str(1.23) # ==> '1.23'
在學(xué)習(xí)Python的過程中,我們將會接觸到越來越多的Python內(nèi)置函數(shù),這些內(nèi)置函數(shù)提供了非常有用的功能,大大降低我們編程的難度。
sum()函數(shù)接收一個(gè)list作為參數(shù),并返回list所有元素之和。請計(jì)算 1*1 + 2*2 + 3*3 + ... + 100*100。
參考答案:
L = [] x = 1 while x <= 100: L.append(x * x) x = x + 1 print(sum(L))
請驗(yàn)證,完成請求
由于請求次數(shù)過多,請先驗(yàn)證,完成再次請求
打開微信掃碼自動綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報(bào)