6.3 函数参数的应用与可变长参数

6.3 函数参数的应用与可变长参数

6.3.1 函数参数的应用

  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)

  1. 形参(函数定义阶段)
  • 默认形参:用于形参经常是同一个值的函数。值不需要改变,在定义阶段,提前赋值给形参;实参传值的时候,实参传的值会覆盖默认值,经常使用。

  • 位置形参:按从左到右位置接收实参的形参。

  • 位置先后顺序:默认形参必须在位置形参后面。

 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)

  1. 实参(函数调用阶段)
  • 关键字实参
    • 适用场景:适用于函数参数较多的情况,可以打乱位置,但关键字实参必须在位置实参后面。
    • 运用方法:在函数调用阶段找到与形参的对应关系,并赋值给对应的形参
    • 关键字实参名:形参名为什么,则关键字实参名也必须是什么
  • 位置实参:传给形参,默认按照从左到右顺序。
  • 位置先后顺序:关键字实参必须在位置实参后面。
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 可变长参数

参数多时,使用关键字参数,但还是较麻烦。

  1. 可变长形参(函数定义阶段)
  • *args:在函数定义阶段,接收所有位置实参,不接收关键字实参。

  • **kwargs:在函数定义阶段,接收所有关键字实参,以字典形式保存下来。

  • 命名规范:

    • *a、**b 也是可以的
    • 但 *args、**kwargs 是约定俗称的一种规范。
 def self_max(*args): #*args接收所有位置参数
     print(args,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)
  1. 可变长实参(函数调用阶段)
  • *args:
    • *把这个元组内的元素取出来,然后按位置对应传给位置形参。(这个过程也是解压缩的过程)
    • 对默认参数也有效,取出的值可以覆盖默认参数。
  • **kwargs:
    • 会把字典打散成键值对的形式作为实参传给关键字形参。
 def self_max(a,b,c,d,e,f):
     print(a,b,c,d,e,f)

 a=(1,2,3,4,5,6)
 self_max(*a) 
    
# self_max(*a)=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(*a,**b) 

# self_max(**b)相当于self_max(g=8,h=9)
# self_max(*a,**b):相当于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)
 a=(1,2,3,4,5,6,7)
 self_max(*a) #对默认参数也有效,取出的值可以覆盖默认参数。
def self_max(*args,**kwargs): #能接收全部实参
    print(args)
    print(kwargs)
a=(1,2,3,4,5,6)
b={'g':8,'h':9}
self_max(*a,**b) 
posted @ 2025-08-20 09:54  bokebanla  阅读(15)  评论(0)    收藏  举报