zoukankan      html  css  js  c++  java
  • Python函数的主要参数类型

    形式参数(形参)

    在定义函数阶段定义的参数称之为形参,相当于变量名

    位置形参(普通形参)

    位置形参:在函数定义阶段,按照从左到右的顺序定义
    特点:必须被传值,且实参与形参按照顺序一一对应,多一个少一个都不行!

    def func():
    	pass
    

    默认形参

    默认形参:在函数定义阶段,就已经被赋值的参数

    def func(x, y=1):
    	pass
    

    普通收集形参

    普通收集形参:用于接收多出部分的位置实参,溢出的部分会被保存成元组类型,然后赋值给后面的形参接收

    def func(x, y, *args):
    	print(x, y)
    	print(args)
    
    func(1, 2, 3, 4, 5, 6, 7, 78, 8, 89)
    

    *后的形参名一般定义为args,为约定俗成

    关键字收集形参

    关键字收集形参:用于接收多出部分的关键字实参,溢出的部分会被**保存成字典类型,然后赋值给**后面的形参接收

    def func(x, y, **kwargs):
    	print(x, y)
    	print(kwargs)
    
    func(a=1, b=2, c=3, x=4, y=5, z=6)
    

    **后的形参名一般定义为kwargs,为约定俗成

    命名关键字形参

    命名关键字形参:在函数定义时,*后定义的参数,就是命名关键字参数
    特点:命名关键字实参必须按照key=value的形式为其传参

    # y=2是带有默认值的命名关键字形参,并非是默认形参,所以可以放置在z的前面
    
    def func(x, *, y=2, z):
    	print(x)
    	# 其中y和z就是命名关键字形参
    	print(y, z)
    
    func(1, z=3)
    

    实际参数(实参)

    在调用函数阶段定义的参数称之为实参,相当于变量值

    位置实参(普通实参)

    位置实参:在函数调用阶段,按照从左到右的顺序依次传入的值
    特点:实参与形参按照顺序一一对应

    def func(x, y):
    	print(x + y)
    
    func(1, 2)
    

    关键字实参

    关键字实参:在函数调用阶段,按照key=value的形式传入的值
    特点:指定给具体的某个形参传值,可以不按照顺序传值

    def func(x, y):
    	print(x + y)
    
    func(y=1, x=2)
    func(x=2, y=1)
    

    *和**的使用

    1. *和**在函数定义处使用

      1. *:把多余的普通实参打包成元组
      2. **:把多余的关键字实参打包成字典
    2. *和**在函数调用处使用

      1. *:对元组或列表进行解包
      2. **:对字典进行解包
    3. *和**同时在函数定义处和调用处使用

      1. 先解包变成位置形参
      2. 再将多余的位置形参打包
    # 示例一
    def func(x, y, z):
    	print(x, y, z)
    
    func(*[1, 2, 3])
    func(*(1, 2, 3))
    func(**{"x": 1, "y": 2, "z": 3})
    
    # 实例二
    def func(x, y, z, *args):
    	print(x, y, z)
    	print(args)
    
    func(5, 6, 7, *[1, 2, 3])
    

    形参与实参的关系

    1. 在调用阶段,实参会绑定给形参
    2. 这种绑定关系只能在函数体内使用
    3. 实参与形参的绑定关系只在函数调用时生效,函数调用结束后解除绑定关系

    总结

    1. 位置实参与关键字实参混合使用时,位置实参必须放在关键字实参前面(语法规定)
    2. 位置形参与默认形参混合使用时,位置形参必须在默认形参的左边
    3. 不能为同一形参重复传值
    4. 默认形参对应的实参可传可不传
    5. *args**kwargs混合使用时,*args必须写在**kwargs的前面,否则会报语法错误
  • 相关阅读:
    Netcat for Windows
    绕过图片格式限制上传木马获取WebShell
    Firefox Security Toolkit 安装
    centos安装异常解决方法
    docker --help
    centos更新163源并升级内核
    CentOS系统内核升级
    CentOS7安装Docker时的异常报错与解决方法
    EPEL库安装
    CentOS7 64位 自动分配IP地址设置
  • 原文地址:https://www.cnblogs.com/kangyz/p/14027361.html
Copyright © 2011-2022 走看看