七、python函式
一、函式定義
輸入一定的資料後,能夠根據裡面的執行步驟,算出另一些資料的值
def 函式的名稱(函式引數1,引數2~~~): ''' 文件字串 docstring 函式的註釋,這個函式是幹嘛用的 引數: 返回值: ''' 函式體(函式的具體執行的邏輯) return 函式的返回值(輸出) 2)函式呼叫def add(a,b): '''兩個數相加''' c = a + b return c sum = add(3,4) print(sum)
3)函式返回值return
函式裡面的return表示函式的返回值,在呼叫函式之後可以通過變數進行接收
函式體遇到return就終止執行,相當於for/while中的break
def add(a,b): if a > 100: return a + b #return終止函式,後面就不會執行 return a + b*3 print(add(150,50))
函式的輸出資料是由return決定的,函式沒有retruen,得到的資料就是None
def add(a,b): c = a + b print(add(1,2)) #結果是none
#定義一個有返回值的append函式 def append(origin_list,element): origin_list.append(element)return origin_list print(append(['zjx'],'python')) #結果['zjx', 'python']
注意:沒有定義的函式,無法呼叫。
4)函式的引數
形式引數:函式在定義的時候寫的引數,相當於變數名,如上的origin_list
實際引數:函式在呼叫的時候寫的引數,他是值,如上的['zjx']
函式從呼叫的角度來說,分為形式引數和實際 引數。形參是指函式建立和定義過程中小括號裡的引數;而實參指得是函式在被呼叫過程中傳遞進來的引數
def add(a,b): c = a + b print(add(1,2)) #a,b是形參,1,2是實參
位置引數:形式引數和實際引數要一一按照順序對應
def append(origin_list,element): origin_list.append(element) return origin_list print(append(['zjx'],'python'))
5)函式文件(.__doc__)
函式文件的作用是描述該函式的功能,給函式寫文件是為了讓別人可以更好的理解你的函式。
函式文件字串可以通過特殊屬性._ _doc_ _
6)預設引數
在函式定義的時候給形式引數一個預設值,有實參時按實參,無實參時按形參的預設值
可以簡化函式呼叫過程,只需要傳入少量引數就可以實現呼叫過程
如果呼叫函式的時候傳入了這個實際引數,預設值不會生效
預設引數必須放到為位置引數的後面
def append(origin_list,element="hello"): origin_list.append(element) return origin_list print(append(['zjx']))
7)關鍵字引數
可以提高函式呼叫時候的可讀性,更加容易理解實際引數的意義
關鍵字的名字就是形式引數
關鍵字引數區別位置引數:可以不按照順序呼叫
關鍵字引數也要放到位置引數後面
def get_name(first_name,middle_name,last_name): '''獲取名字''' return first_name + middle_name + last_name print(get_name( middle_name = 'jing',first_name='zhang',last_name='xuan')) #關鍵字引數在呼叫的時候,可以不按照順序
8)可變長引數
1.位置可變長引數 *args 函式裡面(元組)
*names:在函式內部的表現形式:names是一個元組
可以接收從函式呼叫的時候,多餘的位置引數
加在其他位置引數的後面def get_name(firstname,*names): print(firstname) print(names) return firstname get_name('zhang','jingxue','好看') ''' 結果: zhang ('jingxue', '好看') '''
可不可以只有*names 可以的
def get_name(*names): print(names) get_name('jingxue','好看') ''' 結果: ('jingxue', '好看') '''
2.關鍵字可變長引數 ** kwargs函式裡面得到的是{字典}
# 呼叫函式時**kwargs不傳入引數,返回的是空字典{}
def get_name(*names,**kwargs): print(names) print(kwargs) get_name('zjx','wang') ''' 結果: ('zjx', 'wang') {} '''
# 呼叫函式時**kwargs傳入引數,返回的是字典{},以key-value形式儲存
def get_name(*names,**kwargs): print(names) print(kwargs) get_name('zjx','wang',middle='hello',last='python') ''' 結果: ('zjx', 'wang') {'middle': 'hello', 'last': 'python'} '''
注意:兩個*代表關鍵字引數,一個*號代表位置引數。關鍵字引數要放在位置引數後面
位置可變長引數*names 要放在關鍵字可變長引數**kwargs的前面