找回密码
 立即注册
首页 业界区 安全 6.3 函数参数的应用与可变长参数

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

讲怔 2025-8-20 08:01:56
6.3 函数参数的应用与可变长参数

6.3.1 函数参数的应用


  • 函数分为两个阶段

    • 定义阶段:定义阶段的x,y称为形参,形参应具有描述意义,不为具体数据类型。
    • 调用阶段:调用阶段的x,y称为实参,实参必须有值,是具体的数据类型。
    • 形参与实参关系:形参接收实参

  1. def self_max(x,y): #形参
  2.     #参数无提示,应具有描述意义 例如num1,num2
  3.      if x > y:
  4.          return x
  5.      return y
  6.    
  7.    
  8. self_max(10,20)
复制代码
  1. def guess_age(age): #缺点:每次都要传参,因此可以设置默认形参
  2.      inp_age=input()
  3.      if age==inp_age:
  4.          print('y')
  5.      else:
  6.          print('n')
  7. guess_age(18)
复制代码

  • 形参(函数定义阶段)


  • 默认形参:值不需要改变,在定义阶段,提前赋值给形参;实参传值的时候,实参传的值会覆盖默认值,经常使用。
  • 位置形参:按位置接收实参的形参。
  • 位置先后顺序:默认形参必须在位置形参后面。
  1. def guess_age(age=18): #设置默认形参
  2.         
  3.      inp_age=int(input())
  4.      if age==inp_age:
  5.          print('y')
  6.      else:
  7.          print('n')
  8. guess_age(20) #实参20被传入会覆盖默认形参age原来的值,age=20
  9. # 默认形参必须在位置形参后面
  10. def self_max(x,y,z=5): #x,y位置形参,z:默认形参
  11.      # or (x,y=5,z=10)√、(x=5,y,z=20)×
  12.      return x,y,z
  13. print(self_max(10,1,3))
  14. #输出:(10, 1, 3)
复制代码

  • 实参(函数调用阶段)


  • 关键字实参

    • 适用场景:适用于函数参数较多的情况,关键字实参必须在位置实参后面。
    • 运用方法:在函数调用阶段找到与形参的对应关系,并赋值给对应的形参
    • 关键字实参名:形参名为什么,则关键字实参名也必须是什么

  • 位置实参:传参默认按照顺序。
  • 位置先后顺序:关键字实参必须在位置实参后面。
  1. def self_max(x,y):
  2.     if x>y:
  3.         return x
  4.     else:
  5.         return y
  6. x=self_max(10,20) #位置实参,传参默认按照顺序
  7. result=self_max(y=10,x=20) #关键字传参
  8. print(result)
复制代码
  1. def self_max(x,y,z):
  2.      print(x,y,z)
  3. self_max(10,10,z=3)# 关键字实参必须在位置实参后面
复制代码
6.3.2 可变长参数

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

  • 可变长形参(函数定义阶段)


  • *args:在函数定义阶段,接收所有位置实参,不接收关键字实参。
  • **kwargs:在函数定义阶段,接收所有关键字实参,以字典形式保存下来。
  • 命名规范:

    • *a、**b 也是可以的
    • 但 *args、**kwargs 是约定俗称的一种规范。

  1. def self_max(*args): #*args接收所有位置参数
  2.      print(a,type(args))
  3. self_max(1,2,3,5,6,8,8)
复制代码
  1. def self_max(*args,**kwargs): #**kwargs 接收所有关键字实参,以字典形式保存下来{'x':8,'y':20}
  2.      print(args,type(args))
  3.      print(kwargs,type(kwargs))
  4. self_max(1,2,3,5,6,8,8,x=8,b=20)
复制代码

  • 可变长实参(函数调用阶段)


  • *args:

    • *把这个元组内的元素取出来,然后按位置对应传给位置形参。(这个过程也是解压缩的过程)
    • 对默认参数也有效,取出的值可以覆盖默认参数。

  • **kwargs:

    • 会把字典打散成键值对的形式作为实参传给关键字形参。

  1. def self_max(a,b,c,d,e,f):
  2.      print(a,b,c,d,e,f)
  3. args=(1,2,3,4,5,6)
  4. self_max(*args)
  5.    
  6. # self_max(*args)=self_max(1,2,3,4,5,6)
复制代码
  1. def self_max(a,b,c,d,e,f,g=1,h=3):
  2.     print(a,b,c,d,e,f,g,h)
  3. a=(1,2,3,4,5,6)
  4. b={'g':8,'h':9}
  5. self_max(*args,**kwargs)
  6. # self_max(**kwargs)相当于self_max(g=8,h=9)
  7. # self_max(*arg,**kwargs):相当于self_max(1,2,3,4,5,6,g=8,h=9)
复制代码
  1. def self_max(a,b,c,d,e,f,g=1,h=3):
  2.      print(a,b,c,d,e,f,g,h)
  3. args=(1,2,3,4,5,6,7)
  4. self_max(*args) #对默认参数也有效,取出的值可以覆盖默认参数。
复制代码
来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除

相关推荐

您需要登录后才可以回帖 登录 | 立即注册