6.3 函数参数的应用与可变长参数
6.3.1 函数参数的应用
- 函数分为两个阶段
- 定义阶段:定义阶段的x,y称为形参,形参应具有描述意义,不为具体数据类型。
- 调用阶段:调用阶段的x,y称为实参,实参必须有值,是具体的数据类型。
- 形参与实参关系:形参接收实参
- def self_max(x,y): #形参
- #参数无提示,应具有描述意义 例如num1,num2
- if x > y:
- return x
- return y
-
-
- self_max(10,20)
复制代码- def guess_age(age): #缺点:每次都要传参,因此可以设置默认形参
- inp_age=input()
- if age==inp_age:
- print('y')
- else:
- print('n')
- guess_age(18)
复制代码
- 默认形参:值不需要改变,在定义阶段,提前赋值给形参;实参传值的时候,实参传的值会覆盖默认值,经常使用。
- 位置形参:按位置接收实参的形参。
- 位置先后顺序:默认形参必须在位置形参后面。
- def guess_age(age=18): #设置默认形参
-
- inp_age=int(input())
- if age==inp_age:
- print('y')
- else:
- print('n')
- guess_age(20) #实参20被传入会覆盖默认形参age原来的值,age=20
- # 默认形参必须在位置形参后面
- def self_max(x,y,z=5): #x,y位置形参,z:默认形参
- # or (x,y=5,z=10)√、(x=5,y,z=20)×
- return x,y,z
- print(self_max(10,1,3))
- #输出:(10, 1, 3)
复制代码
- 关键字实参
- 适用场景:适用于函数参数较多的情况,关键字实参必须在位置实参后面。
- 运用方法:在函数调用阶段找到与形参的对应关系,并赋值给对应的形参
- 关键字实参名:形参名为什么,则关键字实参名也必须是什么
- 位置实参:传参默认按照顺序。
- 位置先后顺序:关键字实参必须在位置实参后面。
- def self_max(x,y):
- if x>y:
- return x
- else:
- return y
- x=self_max(10,20) #位置实参,传参默认按照顺序
- result=self_max(y=10,x=20) #关键字传参
- print(result)
复制代码- def self_max(x,y,z):
- print(x,y,z)
- self_max(10,10,z=3)# 关键字实参必须在位置实参后面
复制代码 6.3.2 可变长参数
参数多时,使用关键字参数,但还是较麻烦。
- *args:在函数定义阶段,接收所有位置实参,不接收关键字实参。
- **kwargs:在函数定义阶段,接收所有关键字实参,以字典形式保存下来。
- 命名规范:
- *a、**b 也是可以的
- 但 *args、**kwargs 是约定俗称的一种规范。
- def self_max(*args): #*args接收所有位置参数
- print(a,type(args))
- self_max(1,2,3,5,6,8,8)
复制代码- def self_max(*args,**kwargs): #**kwargs 接收所有关键字实参,以字典形式保存下来{'x':8,'y':20}
- print(args,type(args))
- print(kwargs,type(kwargs))
- self_max(1,2,3,5,6,8,8,x=8,b=20)
复制代码
- *args:
- *把这个元组内的元素取出来,然后按位置对应传给位置形参。(这个过程也是解压缩的过程)
- 对默认参数也有效,取出的值可以覆盖默认参数。
- **kwargs:
- 会把字典打散成键值对的形式作为实参传给关键字形参。
- def self_max(a,b,c,d,e,f):
- print(a,b,c,d,e,f)
- args=(1,2,3,4,5,6)
- self_max(*args)
-
- # self_max(*args)=self_max(1,2,3,4,5,6)
复制代码- def self_max(a,b,c,d,e,f,g=1,h=3):
- print(a,b,c,d,e,f,g,h)
- a=(1,2,3,4,5,6)
- b={'g':8,'h':9}
- self_max(*args,**kwargs)
- # self_max(**kwargs)相当于self_max(g=8,h=9)
- # self_max(*arg,**kwargs):相当于self_max(1,2,3,4,5,6,g=8,h=9)
复制代码- def self_max(a,b,c,d,e,f,g=1,h=3):
- print(a,b,c,d,e,f,g,h)
- args=(1,2,3,4,5,6,7)
- self_max(*args) #对默认参数也有效,取出的值可以覆盖默认参数。
复制代码 来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除 |