#四类参数
·普通参数
·默认参数
·关键字参数
·收集参数
#普通参数
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