文章预览
参数简介
上一期我们学习参数传递怎么传递,也了解了参数的几种类型。
首先,我们再来回顾一下,形参和实参:
形参是在定义函数时定义的,放在函数名后面的圆括号里,可为空
实参是调用函数时为形参传入具体的参数值
简单总结一下,谁调用函数,谁就负责传入参数。
好呐,本期我们来详细学习函数几种参数类型,大纲如下:
1. 位置参数
python函数的参数名是无意义的,Python允许在调用函数时通过通过名字来传入参数值。
位置参数:按照形参位置传入的参数
调用函数时,实参默认按位置顺序传递的。同时实参个数也要和形参匹配
举一个小栗子
# 计算三数之和
def sum_count(a, b, c):
S = a + b + c
print(S)
# 调用函数
sum_count(10, 20, 30)
如果实参的个数与形参不匹配时,调用函数运行就会报错
sum_count(10, 20) # 实参与形参格式不匹配报错
2. 关键字参数
Python中,形参与调用函数紧密联系在一起的。
关键字参数:调用函数时,使形参名称来传递参数,形式为“形参名=实参”
关键字参数,又叫命名参数,传递时无需考虑参数位置和顺序
举一个小栗子
# 计算面积
def calculate(Length, width):
size = Length * width
return size
print("长为20,宽为60面积为:",calculate(Length=20, width=60))
print("长为5,宽为8面积为:",calculate(width=5, Length=8)) # 关键字参数不用考虑位置顺序
3. 默认参数
默认参数:定义函数时,我们可以为形参提前设置具体的值。
在定义函数时,默认参数要放到位置等其他参数后面
在调用函数时,默认参数是可选的。如果传入新值,则会覆盖默认值
举一个小栗子
# 打印长方形,默认是高为5的
def print_rectangle(weight,height=5):
for i in range(height):
for j in range(weight):
print("*", end=" ")
print()
print("打印宽为4的,高采用默认值5的长方形")
print_rectangle(4) # 采用默认值
print("打印宽为3,高为9的长方形")
print_rectangle(3,9) # 覆盖默认值
注意,默认值不能位于位置参数前面,否则程序会报错误
4. 不定长参数
不定长参数又名可变参数。
不定长参数指的是可变数量的参数,分两种情况:
-
*形参 (一个星号),将多个参数收集到一个元组对象中
-
** 形参 (两个星号),将对各参数收集到一个字典对象中
-
形参前只加一个星号,可以传入元组和列表类型的数据给函数进行处理。举一个小栗子
def print_info(listname, *arg):
print("Listname:", listname)
print("arg:",arg)
print_info("student","Tom","Anne","Bob")
def print_dicinfo(Dictname, **arg):
print("Dictname:", Dictname)
print("arg:",arg)
print_dicinfo("JueJinginfo",name="JueJing",address="JueJing.cn")
如果不定长参数后面,可以新增参数吗?
我们通过例子来看,会发生什么?
def test(*a,b,c)::
print(a,b,c)
test(2,3,4)
运行上面的程序,Python解释器会报错
原因是,形参a已经是不定长参数,我们调用的test(2,3,4)传入的三个实参,系统自动把它们属于形参a的值,形参b 和形参c就等于没有值传入,这时候系统就认为,调用函数的对象,参数没有传够。
为了解决这一报错,python引入了
强制命名参数
规定,调用不定参数后面有跟位置参数的函数时,传入给位置参数时,必须要强制命名参进行传参。
test(2,b=3,c=4)
5. 逆向参数收集
逆向参数收集针对的对象传入函数的实参
调用函数时,如果实参是元组,列表或者字典,通过在实参前面加入星号,可以自动把元素进行隔开,然后再转入给函数进行处理
-
*实参(一个星号),可拆分数据类型为元组、列表的实参
-
** 实参(两个星号),可拆分数据类型为字典的实参
举一个小栗子
# 函数的形参有元组类型
def print_info(listname, *arg):
print("Listname:", listname)
# for var in arg:
# print(var)
print("arg:",arg)
List = ["Tom","Anne","Bob"]
print_info("student",*List) #实参前加入一个星号,可以拆分元组,列表类型的实参
# 函数形参是字典类型的数据
def print_dicinfo(Dictname, **arg):
print("Dictname:", Dictname)
print("arg:",arg)
Dict = {"name":"JueJing","address":"JueJi
print_dicinfo("JueJinginfo",**Dict) # 实参前加入两个星号,拆分字典类型的实参
总结
本期,我们详细学习了参数几种类型,为后面我们学习函数,打好基础。
实践是检验真理的过程,大家多动手练习练习,会有不一样的奇妙旅程~
好呐,以上是本期内容,欢迎大佬们评论区指正~
………………………………