目录

01 位置形参与默认形参混用 ==> 位置形参在左,默认形参在右

01 可变长度的位置形参*args 和可变长度的关键字形参**kwargs的混用 ==> *args在左, **kwargs在右

03 位置形参-默认形参-可变长度的位置形参和关键字形参


学习python有点生疏,常言道,温故而知新。

一句话表示参数从左至右的依次顺序:位置形参  默认形参   *args   命名关键字参数  **kwargs

由于命名关键字参数的应用场景很少没所以没有示例。

但是我们很少会将上述的顺序全部使用到,所以这里所列了几种常见的函数搭配的顺序。

01 位置形参与默认形参混用 ==> 位置形参在左,默认形参在右

def tell(a, b, c, d=1, e=2, f=3):
    """这里面, a、b、c时位置形参, d、e、f是默认形参, 它们各自的内部都是调换顺序的.
    譬如位置形参也可以写成b, a, c等等(但是它们都一定位于任一一个默认形参的左侧),
    同理默认实参内部也是可以随意调换顺序的(这取决于你的需要), 但是也一定位于任意一个
    位置形参的左侧。既不能出现d=1, a, b, c, e=2, f=3这种默认形参在左而位置形参在右侧
    的情况。
    """
    print('位置形参:', a, b, c)
    print('默认形参', d, e, f)


tell('位置实参a', '位置实参b', '位置实参c', e=222)
"""注意, 调用函数传参时也需要注意顺序, 位置传参必须在关键字传参的左侧或者说前面"""

输出展示:

gui python 参数传递 python参数传递顺序_函数传参

另外多说一下, 默认形参的值在函数定义阶段就被赋值了,准确一点说应该是被赋予了值的内存地址。(推荐默认参数的值应该是不可变类型)

01 可变长度的位置形参*args 和可变长度的关键字形参**kwargs的混用 ==> *args在左, **kwargs在右

这种参数我使用比较多的都是二者结合使用,并且我比较多用于装饰器。

def tell(*args, **kwargs):
    """args用于接收溢出的位置实参, (元组形式)
    kwargs用于接收溢出的关键字实参, (字典形式)"""
    print('可变长度的位置形参:', args)
    print('可变长度的关键字形参:', kwargs)


tell(1, 2, 3, '你好', '再见', name='hour', age=19, girlfriend=None)

输出展示:

gui python 参数传递 python参数传递顺序_python_02

 03 位置形参-默认形参-可变长度的位置形参和关键字形参

顺序即上面所写的从左至右顺序一样。

def tell(a1, a2, b1='me', b2='you', *args, **kwargs):
    """
    上述a1、a2均为位置形参,必须要在默认形参的前面。
    b1
    """
    print('位置形参:', a1, a2)
    print('默认形参:', b1, b2)
    print('可变长度的位置形参:', args)  # 用于接收多出来的位置实参
    print('可变长度的关键字形参:', kwargs)  # 用于接收多出来的关键字实参


tell('位置实参a1', '位置实参a2', '默认实参b1', '默认实参b2', '可变长度的位置形参1', '可变长度的位置形参2', '可变长度的位置形参3'
     , name='hour', age=19)
"""这里也有需要说明的, 进行传参时位置传参需要在关键字传参的前面, 不可以出现  <b1='默认实参1','无关键字实参3'>这种相反的情况
否则报错"""

输出展示:

gui python 参数传递 python参数传递顺序_经验分享_03

 如果需要加上命名关键字形参,那么其应该位于*args,**kwargs之间,而且*不需要添加,因为前面的*args中已经出现过*了。

至于其他的形参组合顺序类似的可以推出,总之按从左至右的顺序为:

位置形参  默认形参   *args   命名关键字参数  **kwargs

<p>炒茄子</p>