Python系統學習第五課
阿新 • • 發佈:2019-01-04
#四類引數
·普通引數
·預設引數
·關鍵字引數
·收集引數
#普通引數
def stu(name, age, addr):
print("i am student!")
print("我叫{0},今年{1},我住{2}".format(name, age, addr))
stu("lisi", 24, " 我家")
i am student!
我叫lisi,今年24,我住 我家
#關鍵字引數
def stu(name = "no name", age = 18, addr = "家裡"):
print("i am student!" )
print("我叫{0},今年{1},我住{2}".format(name, age, addr))
stu(name = "lisi", addr = "我家", age = 24)
i am student!
我叫lisi,今年24,我住我家
#收集引數
·把沒有位置,不能和定義時的引數未知相對應的引數,放入一個特定的資料結構中
·語法:
def func(*args):
func body
按照list使用方式訪問args得到傳入的引數
呼叫:
func(p1, p2, p3, …)
- 引數名args不是必須這麼寫,但是,我們推薦使用args,約定俗成
-引數名前邊需要有星號
-收集引數可以喝其他引數共存
#收集引數示例
#函式模擬一個學生進行自我介紹,但是具體內容不知道
#args看做一個列表list
def stu(*args):
pass#用來佔位置
stu("liziqiiang", 18, "zhangjiakou", "hagongda")
stu("liuyahui")
#收集引數示例
#函式模擬一個學生進行自我介紹,但是具體內容不知道
#args看做一個列表list
def stu(*args):
print("大家好,我叫李自強")
print(type(args))
for item in args:
print (item)
stu("liziqiiang", 18, "zhangjiakou", "hagongda")
stu("liuyahui")
大家好,我叫李自強
<class 'tuple'>
liziqiiang
18
zhangjiakou
hagongda
大家好,我叫李自強
<class 'tuple'>
liuyahui
stu()#即使沒有引數也可以執行,說明收集引數可以不帶任何實參呼叫,此時收集引數為空tuple,如果函式呼叫時,有關鍵字引數,則會出現問題
大家好,我叫李自強
<class 'tuple'>
#收集引數之關鍵字收集引數
· 把關鍵字引數按字典格式存入收集引數
· 語法:def func( **kwargs ):
func_body
#呼叫
func(p1=v1,p2=v2,p3=v3,...)
·kwargs一般約定俗成
·呼叫的時候,吧多餘的關鍵字引數放入kwargs
·訪問kwargs需要按字典格式訪問
這個的好處在於想寫幾個引數就寫幾個引數
#收集引數之關鍵字收集引數
#呼叫的時候需要使用關鍵字引數呼叫
def stu(**kwargs):
pass
stu(name = "liziiqiang", age = 18, addr = "河北張家口")
stu(name = "liuyahui")
#收集引數之關鍵字收集引數
#呼叫的時候需要使用關鍵字引數呼叫
def stu(**kwargs):
print("大家好,我叫李自強!")
print(type(kwargs)) #在函式體對引數kwargs的使用不用帶星號
for i,j in kwargs.items():
print(i, " = ", j)
stu(name = "liziiqiang", age = 18, addr = "河北張家口")
stu(name = "liuyahui")
大家好,我叫李自強!
<class 'dict'>
name = liziiqiang
age = 18
addr = 河北張家口
大家好,我叫李自強!
<class 'dict'>
name = liuyahui
#收集引數混合使用的順序問題
· 收集引數,關鍵字引數,普通引數可以混合使用
· 使用規則就是,普通引數和關鍵字引數優先
· 定義的時候一般找普通引數,關鍵字引數,收集引數tuple,收集引數dict
#示例
#模擬一個學生的自我介紹
def stu(name, age, hobby = "沒有", *args, **kwargs):
print("大家好")
print("我叫{0},今年{1}歲".format(name,age))
if hobby == "沒有":
print("對不起,我沒有愛好!")
else:
print("我的愛好是{0}".format(hobby))
print("*"* 20)
for i in args: # 列表或者元祖的意思
print(i)
print("*"*30)
for i,j in kwargs.items(): #字典的意思
print(i, " = ", j)
stu("liziqiang", 19)
stu("liziqiang", 19, "看電影")
stu("liziqiang", 19, "看電影", "看書", "上網", hobby2 = "吃飯", hobby3 = "睡覺")
stu("liziqiang", 19, "看電影", "看書", "上網", hobby2 = "吃飯", hobby3 = "睡覺")
大家好
我叫liziqiang,今年19歲
對不起,我沒有愛好!
********************
******************************
大家好
我叫liziqiang,今年19歲
我的愛好是看電影
********************
******************************
大家好
我叫liziqiang,今年19歲
我的愛好是看電影
********************
看書
上網
******************************
hobby2 = 吃飯
hobby3 = 睡覺
大家好
我叫liziqiang,今年19歲
我的愛好是看電影
********************
看書
上網
******************************
hobby2 = 吃飯
hobby3 = 睡覺
#收集引數的解包問題
def stu(*args):
n = 0
for i in args:
print(type(args))
print(n)
n +=1
print(i)
l = ["liziiqang", 23, 13, 34]
stu(l)
#原本的想法是一個一個大打印出來,但是現在是一塊出來,此時,args的表示形式是字典內一個list型別的元素
#此時的呼叫,我們需要一個解包符號,就是在呼叫的時候前面加一個星號
stu(*l)
<class 'tuple'>
0
['liziiqang', 23, 13, 34]
<class 'tuple'>
0
liziiqang
<class 'tuple'>
1
23
<class 'tuple'>
2
13
<class 'tuple'>
3
34
#對dict型別進行解包,需要加兩個星號
#函式文件,作用是對當前函式提供使用相關的參考資訊,寫法:在函式內部開始的第一行使用三字串定義符,一般具有特定格式。文件檢視:使用help函式,形如help(fun),使用__doc__,形如fun.doc