Python的四類函式:
1.普通函式
2.預設函式
3.關鍵字函式
4.收集引數
1.普通函式
a.定義的時候直接定義變數名
b.呼叫的時候直接把變數或者值放入指定位置
def 函式名(引數1,引數2…):
函式體
# 呼叫
函式名(value1,value2….)
# 呼叫的時候,具體值參考的是位置,按位置賦值
# 引數的定義和使用 # 引數person,只是一個符號,代表的事呼叫的時候的某一個資料 # 呼叫的時候,會用p的值代替函式中所有的person def hello(person): print("{0},你好".format(person)) print("吃飯呀!") p = "many" hello(p)
2.預設函式
a.形參帶有預設值
b.呼叫的時候,如果沒有對應的形參傳值,則使用預設值
der func_name(p1=v1,p2=v2….)
func_block
# 呼叫
func_name()
# 呼叫2
value=1
value=2
func_name(value1,value2….)
# 預設引數示例 # 報名小例子,需要知道學生的性別 # 思路: # 學習程式設計師的一般來說都是男生,所以,報名的時候如果沒有特別的指定,認為是男生 def baoming(name,age,sex="male"): if sex == "male": print("{0},今年{1}歲,他很棒!".format(name,age)) else: print("{0},今年{1}歲,ta很棒!".format(name,age)) baoming("張三",18) baoming("小紅",18,“"female")
3.關鍵字引數
a.語法
def func(p1=v1,p2=v2….)
func_body
呼叫函式:
func(p1=v1,p2=v2…..)
b.比較麻煩,但是也有好處
1.不容易混淆,一般實參和形參只是按位置一一對應即可,容易出錯
2.使用關鍵字引數,可以不用考慮引數的位置
# 關鍵字引數使用示例1: def stu(name,age,addr): print("i an student") print("我叫{0},我叫{1},我住{2}".format(name,age,addr)) n = "張三" a = "18" addr = "上海" # 普通引數,只能按照位置傳遞,容易出錯 stu(n,a,addr)
# 關鍵字引數使用示例2: def stu(name = "none",age = 0,addr = "none"): print("i an student") print("我叫{0},我叫{1},我住{2}".format(name,age,addr)) n = "張三" a = "18" addr = "上海" # 這樣就是一一對應的關係 stu(name = n, age = a, addr =addr)
4.收集引數
a.把沒有位置,不能和定義時的引數位置相對應引數,放入一個特定的資料結構中
b.語法
def func(*args):
func_body
按照list使用方式訪問args得到傳入的引數
呼叫:
func(p1,p2,p3…)
b-1:引數名args不是必須這麼寫,但是,我們推薦直接使用args,約定俗成
b-2:引數名args錢需要有星號
b-3:收集引數可以和其他引數共存
# 收集引數程式碼 # 函式模擬一個學生進行一個自我介紹,但是內容具體不清楚 # args把他看做一個list def stu( *args): print("大家好,我為大家簡單自我介紹以下:") # type 函式作用是檢測變數的型別 print(type(args)) #需要進行遍歷 for item in args: print(item, end=" ") print() stu("zhangsan", 18, "beijing") stu("lishi")
大家好,我為大家簡單自我介紹以下:
<class `tuple`> zhangsan 18 beijing 大家好,我為大家簡單自我介紹以下: <class `tuple`> lishi
>>>對於tuple的遍歷,在python中遍歷一般都是用for遍歷
收集函式也能為空
# 收集引數例項 # 說明收集引數可以不帶任何實參呼叫,此時收集引數為空tuple # tuple和list是兄弟倆個 stu()
# 如果使用關鍵字引數格式呼叫,會出現問題 stu(name="zhangsan")
報錯:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-15-8a4d15627038> in <module>()
1 # 如果使用關鍵字引數格式呼叫,會出現問題
----> 2 stu(name="zhangsan")
TypeError: stu() got an unexpected keyword argument `name`
此處在收集函式中不能使用關鍵字蠶食呼叫,但是在字典中可以使用關鍵字引數呼叫
4-1:收集引數之關鍵字收集引數
語法:
def func( **kwargs):
func_body
呼叫:
func(p1=v1, p2=v2, p3=v3….)
– kwargs一般約定俗成
– 呼叫的時候,把多餘的關鍵字引數放入kwagrs
– 訪問kwargs需要按字典格式訪問
# 收集引數案例 # 自我介紹 # 呼叫的時候需要使用關鍵字引數呼叫 def stu( **kwargs): # 在函式體內對於kwargs的使用不用帶星號 print("大家好,我為大家簡單自我介紹以下:") print(type(kwargs)) # 對於字典的訪問,python2和python3 有區別 # 對於字典的訪問kwargs.items() for k,v in kwargs.items(): print(k, "---", v) stu(name="zhangsan", age=18, addr="bejing") stu(name="lishi")
大家好,我為大家簡單自我介紹以下: <class `dict`> name --- zhangsan age --- 18 addr --- bejing 大家好,我為大家簡單自我介紹以下: <class `dict`> name --- lishi
此處收集引數也可以為空
4-2:收集引數混合呼叫的順序問題
– 收集函式,關鍵字函式,普通函式可以混合使用
– 使用規則就是,普通引數和關鍵字引數有限
– 定義的時候一般先找普通引數,關鍵字引數,收集引數,收集引數tuple,收集引數dict
# 收集引數混合呼叫案例 # stu模擬一個學生的自我介紹 def stu(name, age, hobby="沒有",*args, **kwargs): print("hello 大家好") print("我叫{0},我今年{1}歲了!".format(name,age)) if hobby == "沒有": print("很遺憾,我沒有愛好") else: print("我的愛好是{0}".format(hobby)) print("*"*20) for i in args: print(i,end=" ") print("*"*20) for k,v in kwargs.items(): print(k,"---",v) # 開始呼叫函式 name = "zhangsan" age = 18 # 呼叫的不同的格式 stu(name, age) stu(name, age, hobby="python") stu(name, age, hobby="python", hobby2="lklkd",hobby3="聽音樂")
hello 大家好 我叫zhangsan,我今年18歲了! 很遺憾,我沒有愛好 ******************** ******************** hello 大家好 我叫zhangsan,我今年18歲了! 我的愛好是python ******************** ******************** hello 大家好 我叫zhangsan,我今年18歲了! 我的愛好是python ******************** ******************** hobby2 --- lklkd hobby3 --- 聽音樂
返回值:
- 函式和過程的區別
- 有無返回值
- 需要用return顯示返回內容
- 如果沒有返回,則預設返回None
- 推薦寫法,無論有無返回值,最後都要以return結束
# 返回值示例 def func_1(): print("有返回值") return 1 def func_2(): print("沒有返回值") f1 = func_1() print(f1) f2 = func_2() print(f2)
有返回值 1 沒有返回值 None
函式文件:
– 函式的文件的作用是對當前函式提供使用相關的參考資訊
– 文件寫法:
- 在函式內部開始的第一行使用三引號字元定義符
- 一般具有特定格式
- 參考案例
– 文件檢視
- 使用help函式,形如help(func)
- 使用——doc——,參考案例(此處為下滑線倆個)
注意:
函式文件的編寫在pycharm中有詳細的格式要求,在此我就不在闡述了,有興趣的可以看一下
# 文件案例 # 函式stu是模擬一個學生的自我介紹的內容 def func(): ``` 1 2 ``` print("文件案例")
# 檢視文件 help(func) func.__doc__
程式完整程式碼地址:https://github.com/Zhi-peng-wang