標籤:執行 else inpu += 練習 逗號 \n 陷阱 使用
什麼是函數?
先提出一個小練習,不用內建方法,來求一個字串的長度,比如求s = ‘djskdflsdjfslkjgls‘,我們可以用多種方法求取,比如:
1 count = 02 s = ‘djskdflsdjfslkjgls‘3 for i in s:4 count += 15 print(count)
通過上面的for迴圈,我們可以很方便的計算出結果。
若我們用python的內建函數len(),則只使用一個指令即可求出結果。如果我們用如下方法做時:
1 def my_len():2 l = [1, 2, 3, 4, 5, 6, 7, 8]3 count = 04 for i in l:5 count += 16 print(count)7 my_len()
當我們直接使用調用我們定義的my_len()方法時,其結果也可以直接擷取。
這裡,我們將my_len()稱為執行函數,其組成是由 :函數名()。
通過上面分析,我們知道函數有很多優點,總結起來可分為兩點:
1. 函數可以減少代碼的重複性
2. 函數可以增強代碼的閱讀性
函數到底是什嗎?其主要目的是什嗎?接下來我們做一個詳解。
函數其主要的目的就是為了將使用者的需求用代碼錶示出來,然後將其封裝,提供一個函數介面,供使用者後續直接調用。
1 def func():2 print(‘111‘)3 print(‘222‘)4 func(
上述函數中,函數執行的功能只是將需要顯示的內容列印出來。但是通常執行函數後,希望將執行結果給輸出,這樣,我們就要引進函數的傳回值:return。
return 有什麼功能呢?
1. 函數中如果遇到return,則直接結束函數
2. 給函數中的執行者(函數名():整體是函數的執行者)傳回值
3. return 返回單個值,即原封不動的返回(是什麼類型,就返回什麼類型值)
4. return 返回多個值,即返回一個元組,所有值都是元組的一個元素
註:在工作中,通常函數盡量不要使用print。
對以上return分別舉例:
1. 函數中如果遇到return,則直接結束函數
1 def func():2 print(‘111‘)3 print(‘222‘)4 return5 print(‘333‘)6 func()
函數執行的結果為:111,222。函數執行後,當遇到return,直接結束函數,後面語句不再執行。
2 return 返回單個值
1 def func_1(): 2 a = 1 3 b = 2 4 c = a + b 5 d = [1,2,3] 6 e = (4,5,6,7) 7 f = ‘olin‘ 8 g = ‘ beault‘ 9 h = f + g10 return h11 print(func_1())
3 return多個值,返回的是一個元組
1 def func_1():2 a = 13 b = 24 d = [1,2,3]5 e = (4,5,6,7)6 f = ‘Colin‘7 return a,d,e,f8 print(func_1())
上面的代碼執行結果為:(1, [1, 2, 3], (4, 5, 6, 7), ‘Colin‘) ,多個值返回的是一個元組,每個值是元組的一個元素。
函數的傳參
函數的參數分為:函數實參與函數形參。
實參:函數執行者(實參)實際的參數
形參:定義函數時,括弧裡面的參數
實參
對於實參,通常有三種表示方式:
1. 位置參數
2. 關鍵字參數
3. 混合參數
位置參數:要求:按照順序,一一對應
1 def func1(x, y):2 print(x, y )3 func1(1,2)
1 def add(x, y):2 c = x +y3 return c4 print(‘x + y =‘, add(1, 2))
1 def max(x, y):2 if x > y:3 c = x4 else:5 c = y6 return c7 print(‘較大的值為:‘, max(32, 45))
關鍵字參數:要求:可以不按照順序,但是必須一一對應
1 def func1(x, y):2 return x + y3 print(func1(y = 100, x = 32))
混合參數:要求:關鍵字參數一定要在位置參數之後
1 def func1(a, b, x, y):2 return a + b + x + y3 print(func1(100, 56, y = 100, x = 32))4 5 def func1(a, b, name, x, y):6 return a + b + x + y7 name = ‘Colin‘8 print(func1(100, 56, name, y = 100, x = 32)) # name 是位置參數
形參
從形參角度去分析,形參主要分為位置參數與預設參數兩種。
位置參數:按照順序一一對應
1 def func(x, y ,z):2 print(x, y,z)3 func(1,2,3)
預設參數:給其傳值,將原預設參數覆蓋,不傳值時不報錯,使用預設值。
1 def func1(x, y, a = 666):2 print(x, y, a)3 func1(1, 2)4 func1(1, 2, 256)
應用場合 :不經常改變的參數,但是一直再用。
下面提供一個要求,需要不斷輸入個人資訊,如姓名與性別。並將資訊寫入檔案中。
方法1:不使用函數功能
1 while 1: 2 name, sex = input(‘請輸入姓名與性別,中間用逗號分隔:‘).strip().replace(‘,‘,‘,‘).split(‘,‘) 3 if name.upper() == ‘Q‘: 4 break 5 with open(‘a1.txt‘,encoding=‘utf-8‘,mode= ‘a‘) as f1: 6 f1.write(‘{}|{}\n‘.format(name, sex)) 7 if sex.strip(): 8 namelist(name, sex) 9 else:10 namelist(name)11 namelist(name, sex)
方法2:使用函數功能
1 def namelist(name, sex = ‘男‘): 2 with open(‘a1.txt‘, encoding=‘utf-8‘, mode=‘a‘) as f1: 3 f1.write(‘{}|{}\n‘.format(name, sex)) 4 while 1: 5 name, sex = input(‘請輸入姓名,性別‘).strip().replace(‘,‘, ‘,‘).split(‘,‘) 6 if name.upper() == ‘Q‘: break 7 if sex.strip(): 8 namelist(name, sex) 9 else:10 namelist(name)11 namelist(name, sex)預設參數的陷阱
預設參數若是可變資料類型(如:list),但他始終使用的是一個,即預設參數共用一個記憶體位址。
1 def func1(x, l1 = []):2 l1.append(x)3 return l14 ret = func1(1)5 print(ret,id(ret)) # [1] 18351409801046 ret2 = func1(100)7 print(ret2,id(ret2)) # [1, 100] 1835140980104
Python函數初