四类参数
关键字参数
def fun(p1=v1, p2=v2, ...):
fun_body
调用函数:
fun(p1=value1, v2=value2, ...)
- 比较麻烦,但是也有好处:
- 不容易混淆,一般实参和形参只是按照位置一一对应即可,容易出错
- 使用关键字参数,可以不考虑参数位置
#关键字参数示例
def student(name="No name", age=0, address="No address"):
print("I am a student")
print("My name is %s,i am %s,my home town is %s"%(name, age, address))
_name = "张三"
_age = 18
_address = "山西"
#普通参数,只按照位置传递,容易出错
student(name=_name, age=_age, address=_address )
I am a student
My name is 张三,i am 18,my home town is 山西
收集参数
- 把没有位置,不能和定义时的参数位置相对应的参数,放入一个特定的数据结构中
- 语法
def fun(*args):
fun_body
按照list使用方式访问args得到传入的参数
调用:
fun(p1, p2, p3, ......)
- 参数名args不是必须这么写,但是,推荐用args,约定俗成
- 参数名args前需写星号
- 收集参数可以和其他参数共存
# 收集参数代码
# 函数模拟一个学生进行自我介绍,但具体内容不清楚
# args 把他看成一个list
def stu( *args):
print("Hello, 大家好!")
print(type(args)) #type函数检测变量的类型
for it in args:
print(it)
stu("王五", 18, "北京")
stu("桃大仙,啊哈")
王五
18
北京
Hello, 大家好!
桃大仙,啊哈
收集参数 之 关键字收集参数
def fun( **kwargs):
fun_dody
#调用
fun(p1=v1, p2=v2, p3=v3, ......)
- kwargs约定俗成
- 调用的时候,把多余的关键字参数kwargs
- 访问kwargs需要按字典格式访问
# 收集参数案例
# 自我介绍
# 调用的时候需要使用关键字参数调用
# 收集参数案例
def stu( **kwargs):
print("大家好,我来介绍下:")
print(type(kwargs))
for k, v in kwargs.items():
print(k,"-----",v)
print("*" * 50)
stu(name="张三", age=18, address="东北", love="李四", work="Student")
stu(name="桃大神")
stu(age=20)
大家好,我来介绍下:
<class 'dict'>
name ----- 张三
age ----- 18
address ----- 东北
love ----- 李四
work ----- Student
**************************************************
大家好,我来介绍下:
<class 'dict'>
name ----- 桃大神
**************************************************
大家好,我来介绍下:
<class 'dict'>
age ----- 20
**************************************************
收集参数 之 混合调用的顺序问题
- 收集参数、关键字参数、普通参数可以混合使用
- 使用规则就是,普通参数和关键字参数优先
- 定义的时候一般找普通参数,关键字参数,收集参数tuple,收集参数dict
# 收集参数混合调用案例
# stu模拟一个学生的自我介绍
def stu(name, age, address, hobby="没有", *args, **kwargs):
print("大家好!")
print("我叫%s,我今年%s岁了,我的家庭在%s"%(name, age, address))
if(hobby == "没有"):
print("我没有爱好!@")
else:
print("我的爱好是%s"%hobby)
for k, v in kwargs.items():
print(k, " ", v)
print("*" * 50)
# NO.1
stu(name="嘻嘻", age=12, address="sda")
# NO.2
stu(name="呵呵", age=5, address="机场", hobby="打游戏")
# NO.3
stu(name="哈哈", age=18, address="机场", hobby="打ss", love="嘻嘻")
大家好!
我叫嘻嘻,我今年12岁了,我的家庭在sda
我没有爱好!@
**************************************************
大家好!
我叫呵呵,我今年5岁了,我的家庭在机场
我的爱好是打游戏
**************************************************
大家好!
我叫哈哈,我今年18岁了,我的家庭在机场
我的爱好是打ss
love 嘻嘻
**************************************************
网友评论