1. 程式人生 > >Python系統學習第五課

Python系統學習第五課

#四類引數
·普通引數
·預設引數
·關鍵字引數
·收集引數

#普通引數
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