python函數(1):初始函數
在學了前面很多python的基礎類型後,我們終於可以進入下一階段,今天我們將走進一個函數的新世界。
預習:
1、寫函數,計算傳入字符串中【數字】、【字母】、【空格] 以及 【其他】的個數 2、寫函數,判斷用戶傳入的對象(字符串、列表、元組)長度是否大於5。 3、寫函數,檢查傳入列表的長度,如果大於2,那麽僅保留前兩個長度的內容,並將新內容返回給調用者。 4、寫函數,檢查獲取傳入列表或元組對象的所有奇數位索引對應的元素,並將其作為新列表返回給調用者。View Code
一、函數的定義
函數的出現
如果我們需要比較倆個數的大小,比如說(4,5),(10,20),(15,30)等等怎麽寫?
a,b = 4,5 c,dView Code= 10,20 e,f = 15,30 if a > b: print(a) else: print(b) if a > b: print(a) else: print(b) if a > b: print(a) else: print(b)
這段代碼給不會編程的人看他也會看出我們這段代碼太多了,功能相同基本都是重復的代碼。
這段代碼存在兩個問題:
1、代碼冗余
2、可讀性差
這個時候我們就引入了我們今天的重點——函數
只需要把重復的代碼提取出來,放在一個公共的地方,起個名字,以後誰想用這段代碼,就通過這個名字調用就行了
def max_l(a,b) : ‘‘‘ 用來比較兩個數值的大小 :param a: 傳進來的第一個數 :param b: 傳進來的第二個數 :return: 無返回值 ‘‘‘ if a > b: print(a) else: print(b) max_l(4,5) max_l(10,20) max_l(15,30)View Code
定義:
def 關鍵詞開頭,空格之後接函數名稱和圓括號(),最後還有一個":"。
def 是固定的,不能變,必須是連續的def三個字母,不能分開。。。它們要相親相愛的在一起。
空格為了將def關鍵字和函數名分開,必須空,當然你可以空2格、3格或者你想空多少都行,但正常還是空1格。
函數名:函數名只能包含字符串、下劃線和數字且不能以數字開頭。雖然函數名可以隨便起,但我們給函數起名字還是要盡量簡短,並能表達函數功能
括號:是必須加的
註釋:每一個函數都應該對功能和參數進行相應的說明,應該寫在函數下面第一行用多引號引起來。以增強代碼的可讀性。
調用:就是 函數名() 要記得加上括號。
總結使用函數的好處:
1.代碼重用
2.保持一致性,易維護
3.可擴展性
二、函數的返回值
剛才我們確實實現了比較大小也將結果打印了出來可是我們怎麽用一個變量來接收這個值呢?
return關鍵字
return 是一個關鍵字,在pycharm裏這個詞翻譯過來就是“返回”,所以我們管寫在return後面的值叫“返回值”
要研究返回值,我們還要知道返回值有幾種情況:分別是沒有返回值、返回一個值、返回多個值
沒有返回值
1、不寫return的情況下,會默認返回一個None我們寫的第一個函數,就沒有寫return,這就是沒有返回值的一種情況。
2、只寫return,後面不寫其他內容,也會返回None,既然沒有要返回的值,完全可以不寫return,為什麽還要寫個return呢?因為return有一個重要用法,就是一旦遇到return,結束整個函數
3、 return None
返回一個值
剛剛我們已經寫過一個返回一個值的情況,只需在return後面寫上要返回的內容即可。
def max_l(a,b) : ‘‘‘ 用來比較兩個數值的大小 :param a: 傳進來的第一個數 :param b: 傳進來的第二個數 :return: 無返回值 ‘‘‘ if a > b: return a else: return b a = max_l(4,5) b = max_l(10,20) c = max_l(15,30) print(a,b,c)View Code
註意:return和返回值之間要有空格,可以返回任意數據類型的值
返回多個值
可以返回任意多個、任意數據類型的值
def ret_demo1(): ‘‘‘返回多個值‘‘‘ return 1,2,3,4 def ret_demo2(): ‘‘‘返回多個任意類型的值‘‘‘ return 1,[‘a‘,‘b‘],3,4 ret1 = ret_demo1() print(ret1) ret2 = ret_demo2() print(ret2)View Code
返回的多個值會被組織成元組被返回,也可以用多個值來接收
def ret_demo2(): return 1,[‘a‘,‘b‘],3,4 #返回多個值,用一個變量接收 ret2 = ret_demo2() print(ret2) #返回多個值,用多個變量接收 a,b,c,d = ret_demo2() print(a,b,c,d) #用多個值接收返回值:返回幾個值,就用幾個變量接收View Code
總結:
返回值數=0:返回None
返回值數=1:返回object
返回值數>1:返回tuple
三、函數的參數
剛才比較大小的函數就是一個有參數的函數剛才返回值裏舉的例子就是不帶參的函數
我們告訴 max_l 函數要計算的字符串是誰,這個過程就叫做傳遞參數,簡稱傳參,我們調用函數時傳遞的這個“4,5”“10,20”“15,30”和定義函數時的a,b就是參數。
實參與形參
我們調用函數時傳遞的這個“4,5”“10,20”“15,30”被稱為實際參數,因為這個是實際的要交給函數的內容,簡稱實參。
定義函數時的a,b,只是一個變量的名字,被稱為形式參數,因為在定義函數的時候它只是一個形式,表示這裏有一個參數,簡稱形參。
傳遞多個參數:參數可以傳遞多個,多個參數之間用逗號分割
位置參數
站在實參角度
1、按照位置傳值
def mymax(x,y): #此時x=10,y=20 the_max = x if x > y else y return the_max ma = mymax(10,20) print(ma)View Code
2、按照關鍵字傳值
def mymax(x,y): #此時x = 20,y = 10 print(x,y) the_max = x if x > y else y return the_max ma = mymax(y = 10,x = 20) print(ma)View Code
3、位置、關鍵字形式混著用
def mymax(x,y): #此時x = 10,y = 20 print(x,y) the_max = x if x > y else y return the_max ma = mymax(10,y = 20) print(ma)View Code
正確用法
位置參數必須在關鍵字參數的前面
對於一個形參只能賦值一次
站在形參角度
位置參數必須傳值
def mymax(x,y): #此時x = 10,y = 20 print(x,y) the_max = x if x > y else y return the_max #調用mymax不傳遞參數 ma = mymax() print(ma) #結果 TypeError: mymax() missing 2 required positional arguments: ‘x‘ and ‘y‘ 位置參數必須傳參View Code
默認參數
1.正常使用
為什麽要有默認參數:將變化比較小的值設置成默認參數
2.默認參數的定義
def stu_info(name,sex = "male"): """打印學生信息函數,由於班中大部分學生都是男生, 所以設置默認參數sex的默認值為‘male‘ """ print(name,sex) stu_info(‘alex‘) stu_info(‘eva‘,‘female‘)View Code
3.參數陷阱:默認參數是一個可變數據類型
def defult_param(a,l = []): l.append(a) print(l) defult_param(‘alex‘) defult_param(‘egon‘)View Code
動態參數
按位置傳值多余的參數都由*args統一接收,保存成一個元組的形式
def mysum(*args): the_sum = 0 for i in args: the_sum+=i return the_sum the_sum = mysum(1,2,3,4) print(the_sum)View Code
按關鍵字傳值多余的參數都由*kwargs統一接收,保存成一個字典的形式
def stu_info(**kwargs): print(kwargs) print(kwargs[‘name‘],kwargs[‘sex‘]) stu_info(name = ‘alex‘,sex = ‘male‘)View Code
總結圖:
預習解答:
def length(str) : ‘‘‘ 計算傳入字符串中數字、字母、空格以及其他的個數 :param s:用戶出入的字符串 :return:各類的個數 ‘‘‘ a = b = c = d = 0 for i in str : if i.isdigit() : a += 1 elif i.isalpha() : b += 1 elif i.isspace() : c += 1 else: d += 1 return a,b,c,d msg = input("please input:") a,b,c,d = length(msg) print("數字:{} 字母:{} 空格:{} 其他:{}".format(a,b,c,d)) def length(str) : ‘‘‘ 判斷用戶傳入的對象(字符串、列表、元組)長度是否大於5。 :param str: 用戶傳入的對象 :return: 返回布爾值 ‘‘‘ if len(str) <= 5 : return False else: return True msg = length("hello world") msg1 = length([1,2,3,4]) msg2 = length((1,2,3,4,5,6)) print(msg,msg1,msg2) def length(str) : ‘‘‘ 檢查傳入列表的長度,如果大於2,那麽僅保留前兩個長度的內容,並將新內容返回給調用者。 :param str:傳入的列表 :return:返回列表前兩位 ‘‘‘ if len(str) > 2 : return str[0:2] return str list_l = [1,2,3,4,5,6] print(length(list_l)) def func(str) : ‘‘‘ 檢查獲取傳入列表或元組對象的所有奇數位索引對應的元素,並將其作為新列表返回給調用者。 :param str:傳入的列表或元組 :return:新列表 ‘‘‘ return str[1::2] msg = (1,2,3,4,5,6,7,8,9) print(func(msg))View Code
python函數(1):初始函數