Python:函数参数传参方式

本文详细介绍了Python中函数的定义与调用,重点解析了各种参数传参方式,包括位置参数、关键词参数、默认值参数、可变参数及参数解构。通过实例解析了参数传参的规则和注意事项,帮助读者掌握Python函数参数的灵活运用。

目录

函数定义、调用

函数参数传参

函数参数可变参数传参

例子

参数解构


 

函数定义、调用

  • def语句定义函数
    def 函数名(参数列表):
        函数体(代码块)
        [return 返回值]
    • 函数名就是标识符,命名要求一样
    • Python的函数没有return语句,隐式会返回一个None值
    • 定义中的参数列表成为形式参数,只是一种符号表达,简称形参
  • 调用
    • 调用的方式,就是函数名加上小括号,括号内写上参数
    • 调用时写的参数是实际参数,是实实在在传入的值,简称实参

函数参数传参

  • 位置参数传参
    • ​​​​​​​按照函数的形参个数,就行实参传递;形参的个数要与实参的个数匹配,不然函数回报错TypeError: 
      def est_qw(a,b,c):
          print(a)
          print(b)
          print(c)
      
      est_qw(1,2,3)
      
      结果:
      
      1
      2
      3
      ​​​​​​​
  • 关键词参数传参
    • ​​​​​​​使用形参的名字来出入实参的方式,如果使用了形参名字,那么传参顺序就可和定义顺序不同​​​​​​​
      def est_qw(a,b,c):
          print(a)
          print(b)
          print(c)
      
      est_qw(c=1,b=3,a=2)
      
      结果:
      2
      3
      1
  • 默认值参数传参
    • ​​​​​​​参数的默认值可以在未传入足够的实参的时候,对没有给定的参数赋值为默认值
    • 参数非常多的时候,并不需要用户每次都输入所有的参数,简化函数调用
    • 位置形参要放到,默认参数之后
      def est_qw(c,a=1,b=2,):
          print(a)
          print(b)
          print(c)
      
      est_qw(4)
      
      结果:
      1
      2
      4

​​​​​​​​​​​​​​函数参数可变参数传参

  • 位置参数的可变参数​​​​​​​ 
    • 在形参前使用【 * 】表示该形参是可变参数,可以接收多个实参​​​​​​​
    • 收集多个实参为一个tuple
      def est_qw(*args):
          print(args)
          for i in args:
              print(i)
      
      est_qw(1,2,3,4,5)
      
      结果:
      (1, 2, 3, 4, 5)
      1
      2
      3
      4
      5
  • 关键字参数的可变参数
    • ​​​​​​​形参前使用**符号,表示可以接收多个关键字参数
    • 收集的实参名称和值组成一个字典
      def est_qw(**kwargs):
          print(kwargs)
          for k,v in kwargs.items():
              print(f"key:{k},valuee:{v}")
      
      est_qw(a=1,b="ji")
      
      结果:
      {'a': 1, 'b': 'ji'}
      key:a,valuee:1
      key:b,valuee:ji
  • 有位置可变参数和关键字可变参数
  • 位置可变参数在形参前使用一个星号*
  • 关键字可变参数在形参前使用两个星号**
  • 位置可变参数和关键字可变参数都可以收集若干个实参,位置可变参数收集形成一个tuple,关 键字可变参数收集形成一个dict
  • 混合使用参数的时候,可变参数要放到参数列表的最后,普通参数需要放到参数列表前面,位 置可变参数需要在关键字可变参数之前【 位置参数 > 动态位置参数 > 默认参数(关键字参数) > 动态关键字参数

​​​​​​​例子

  • 位置可变参数后有位置参数【相当于关键字传参】
    • 在一个星号参数后,或者一个位置可变参数后,出现的普通参数,实际上已经不是普通的 参数了,而是【关键字】参数​​​​​​​
      def fn(*args, x):
          print(x)
          print(args)
      
      结果:
      fn(3,5)        #错误传参
      fn(3,5,7)         #错误传参
      fn(3,5,x=7)
  • 位置可变参数后有位置参数【相当于关键字传参】
    • 直接报语法错误;可以理解为kwargs会截获所有的关键字参数,就算你写了x=5,x也永远得不到这个值,所以语法 错误​​​​​​​
      def(**kwargs, x):
          print(x)
      print(kwargs)
      
      
  • 关键字传参的另一种方式
    • *号之后,普通形参都变成了必须给出的关键字参数​​​​​​​
      def fn(*, x,y):
          print(x,y)
      
      
      结果:
      # fn(5, 6)  #错误示例
      fn(x=5,y=6)
      
  • 参数一般顺序是,普通参数、缺省参数、可变位置参数、keyword-only参数(可带缺 省值)、可变关键字参数​​​​​​​
    def fn(x, y, z=3, *arg, m=4, n, **kwargs):
    print(x,y,z,m,n)
    print(args)
    print(kwargs)
    

 

参数解构

  • 参数解构
    • 给函数提供实参的时候,可以在集合类型前使用*或者**,把集合类型的结构解开,提取出所有 元素作为函数的实参
    • 非字典类型使用*解构成位置参数
    • 字典类型使用**解构成关键字参数
    • 提取出来的元素数目要和参数的要求匹配,也要和参数的类型匹配
      def add(x, y):
          return x+y
      
      print(add(*(4,5)) )
      d = {'x': 5, 'y': 6}
      print(add(**d))
      print(add(**{'a': 5, 'b': 6}))   #a,b关键字参数不存在,会报错
      print(add(**{'x': 5, 'y': 6}))
      
  • 参数解构和可变参数
    • ​​​​​​​给函数提供实参的时候,可以在集合类型前使用*或者**,把集合类型的结构解开,提取出所有 元素作为函数的实参
      def add(*iterable):
          for x in iterable:
              print(x)
      
      结果
      # add(4,2,3) 
      # add(*[4,2,3]) 
      add(*range(10))
      

​​​​​​​

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值