python初識函式(2)
引言
今天繼續認識函式,函式其實在以後的程式設計中,我們會經常用到,畢竟函式可以讓我們的程式碼更加的簡潔。
函式的定義與呼叫
-
函式一定要先定義好才可以使用
-
在定義階段你只能看語法是否出錯
-
只有呼叫函式的時候,函式體程式碼才會執行
-
函式名可以把它比作變數名,它指向的是記憶體中函式體程式碼所在的記憶體空間
注意:函式呼叫一定要記得是函式名加括號,要按照語法來進行呼叫,不然會報錯
函式分類
函式主要分為內建函式和自定義函式,內建函式是python直譯器已經給我們定義好了的,可以直接呼叫。自定義函式需要問我們自己編寫,同時自定義函式還分為無參函式(在函式定義的時候括號內沒寫引數)、有參函式(在定義的時候括號內寫了引數)、空函式(在定義階段函式體程式碼用pass或者...來補全語法結構)。
空函式主要還是在前期使用的,用空函式快速羅列程式的大致功能,讓程式能夠更完整,用於前期框架搭建。
函式的返回值
函式的返回值是在呼叫函式後返回的結果,如果程式碼中沒有return返回值就是None。有return但是沒有跟任何值,那麼也是None。有return且跟資料,那麼跟的是什麼資料就返回什麼資料。如果return後面有多個值,用逗號隔開,那麼返回一個元組。記住return類似於break,一旦看見立刻結束。
函式的引數
-
函式中引數分為兩大類
1.1 函式在定義階段括號內的引數稱為形參
1.2 函式在呼叫階段括號內些的引數叫實參
-
形參和實參的關係
形參類似於變數名、實參類似於變數值,在呼叫函式的時候,實參臨時和形參進行繫結,函式執行完畢自動解綁。
引數
位置引數
位置形參指的是是在函式定義階段括號內從左往右一次填寫的變數名,位置實參指的是函式呼叫階段括號內從左往右一次傳入的真是資料。位置形參的特徵,位置形參和位置實參的繫結順序是從左往右依次繫結。位置形參和位置實參個數要相同,不然會報錯。
def index(a, b):
print(a, b) # 外界傳入什麼實參這裡就列印什麼
# index(1,2)
# index('jason',123)
# index() # 呼叫的時候不傳實參不可以
# index(111) # 傳少了也不行
index(111,222,333) # 傳多了也不行
關鍵字引數
在實參中,指名道姓的與形參繫結,不遵循位置的叫做關鍵字引數。
def index(a, b):
print(a, b)
index(b=111, a=222) # 指名道姓的說形參a接收資料222 b接收資料111
index(b=333,222) # 報錯 關鍵字引數必須放在位置引數的後面
index(222,a=111) # 報錯 形參只能指向一個實參
index(222,b=111) # 可以 相當於位置引數
預設引數
預設引數其實是在定義函式的時候已經給一些形參繫結變數值了,你在呼叫的時候入夥不給它傳值,那麼他就是預設的值,如果繼續傳值就是傳入的值。預設的引數一定要定義在位置引數的後面,不然報錯。
def register(name, age, gender='猛男'):
"""
函式的形參在命名的時候也應該見名知意
"""
print("""
學員姓名:%s
學員年齡:%s
學員性別:%s
""" % (name, age, gender))
register('jason', 18) # 不傳就使用預設的
register('kevin', 28)
register('jerry',22,'美女') # 傳了就使用自己的
可變長引數
在我們不知道要傳多少實參的時候可以用可變長引數。單星號在形參中,可以接受多餘的位置實參,並且組成元組型別賦值給單星號後面的變數名。雙星號在性慘重,用於接收多餘的關鍵字引數,組成字典的型別賦值給雙星號後面的變數名,當你要定義一個無論接收多少任意型別的引數都可以執行的函式時,就要把單星號和雙星號都用上,並且它們的變數名也是有推薦的。單星號和雙星號還可以用在實參中,單星號用在實參中可以把列表或元組打散成位置引數一個一個傳入。雙星號可以把字典打散成關鍵字引數一個一個傳入。
# 單星號
def func(*a):
print(a)
func() # ()
func(1,2) # (1, 2)
func(1,2,3,4,5,6) # (1, 2, 3, 4, 5, 6)
# 雙星號
def index(a, b, **k):
print(a, b, k)
index(a=1, b=2) # 1 2 {}
index(a=1, b=2, c=3, name='jason') # 1 2 {'c': 3, 'name': 'jason'}
index(1,2,name='jason',age=18,pwd=123) # 1 2 {'name': 'jason', 'age': 18, 'pwd': 123}
# 推薦變數名
def index(*args, **kwargs):
pass
# 單星號實參
def index(*args, **kwargs):
print(args, kwargs)
# index(*['jason', 'kevin', 'tony', 'oscar', 'jerry']) # ('jason', 'kevin', 'tony', 'oscar', 'jerry') {}
# index(*('jason', 'kevin', 'tony', 'oscar', 'jerry')) # ('jason', 'kevin', 'tony', 'oscar', 'jerry') {}
# index(['jason', 'kevin', 'tony', 'oscar', 'jerry']) # (['jason', 'kevin', 'tony', 'oscar', 'jerry'],) {}
# 雙星號實參
index(**{'name':'jason','age':18,'pwd':123}) # () {'name': 'jason', 'age': 18, 'pwd': 123}
index({'name':'jason','age':18,'pwd':123}) # ({'name': 'jason', 'age': 18, 'pwd': 123},) {}