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

猜你喜欢

转载自blog.csdn.net/qq_42633819/article/details/85691804
今日推荐