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