位置参数和关键字参数(根据实参的传递方式对参数进行的分类)
a. 位置参数:实参位置和形参保持一致,按参数的先后顺序一一赋值
b. 关键字参数:调用函数的时候,以形参 = 实参的方式来传参,这个时候实参的顺序无所谓
每个形参都必须有值,且数量不能多
def func1(a, b, c):
print(a, b, c)
# 通过位置参数给形参赋值
func1(10, 20, 30)
# 通过位置参数和关键字参数结合传参(注意关键字参数必须在位置参数的后面)
参数默认值
-
声明函数的时候,可以给参数赋默认值。如果一个形参有默认值,那么调用这个函数的时候这个参数就可以不用传参了
-
如果有的形参有默认值,有的形参没有默认值,有默认值的参数要放在没有默认值的形参的后面
-
调用函数要保证每个参数都有值
-
参数有默认值,调用函数的时候c可以不用传参
-
参数默认值能够限定参数的类型,不会报错,但是会给出一个类型不匹配的提示
参数的类型说明 - 类型说明只有提示功能,没有约束功能
-
a. 给参数设置默认值, 默认值的类型就是参数的类型
-
b. 在形参后面加:类型名,这种方式调用的时候必须传参
注意:若一个参数已经给力默认值了,就不能再加冒号写类型名
类型说明的好处:a. 对实参的类型进行指导,b. 实现函数功能的时候有类型相关的语法提示
def func2(a:int, b:str):
print(type(a), type(b))
func2(1, '123')
func2('str', 1)
def func3(list1 = 'name or num', index = 0):
print(list1[index])
func3()
不定长参数
- a. 在参数名前加*号,可以用来同时获取多个实参的值 -- 实质是将带星号的参数变成元组,将多个实参的值作为元组的元素
注意:a. 如果函数中即有不定长参数,又有普通参数,那么不定长参数必须放在普通参数后边
- b. 在参数名前加两个星号**, 将形参作为key,实参作为值,形成一个字典
开发时一般是一颗星与两颗星同时存在,或者只用一颗星
不带星要放在一颗星前面,一颗星要放在两颗星前面
def func7(\*args, \*\*kwargs): #让调用函数的时候更加随意,使用位置参数或者关键字参数都可以
print(args, kwargs)
func7(10, 5, 89)
func7(a = 1, b = 2, c = 3)
func7(90, 70, z = 1, v = 87)
# 写一个函数,计算多个数的和(要求可以使用位置参数也可以使用关键字参数)
def sumItem(\*args, \*\*kwargs):
print(sum(args) + sum([value for value in kwargs.values()]))
sumItem(1,2,3)
sumItem(a=1, b=2, c=3)
sumItem(1, 2, 3, a=1, b=2)
网友评论