Python函数的参数顺序

简介: Python函数的参数顺序

学习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)
"""注意, 调用函数传参时也需要注意顺序, 位置传参必须在关键字传参的左侧或者说前面"""

输出展示:

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


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)


输出展示:

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'>这种相反的情况
否则报错"""


输出展示:


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


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


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

目录
相关文章
|
4天前
|
Python
python函数进阶
python函数进阶
|
3天前
|
安全 Python
Python量化炒股的获取数据函数—get_industry()
Python量化炒股的获取数据函数—get_industry()
10 3
|
4天前
|
Python
Python sorted() 函数和sort()函数对比分析
Python sorted() 函数和sort()函数对比分析
|
3天前
|
Python
Python量化炒股的获取数据函数—get_security_info()
Python量化炒股的获取数据函数—get_security_info()
10 1
|
6天前
|
数据库 开发者 Python
实战指南:用Python协程与异步函数优化高性能Web应用
在快速发展的Web开发领域,高性能与高效响应是衡量应用质量的重要标准。随着Python在Web开发中的广泛应用,如何利用Python的协程(Coroutine)与异步函数(Async Functions)特性来优化Web应用的性能,成为了许多开发者关注的焦点。本文将从实战角度出发,通过具体案例展示如何运用这些技术来提升Web应用的响应速度和吞吐量。
12 1
|
6天前
|
调度 Python
揭秘Python并发编程核心:深入理解协程与异步函数的工作原理
在Python异步编程领域,协程与异步函数成为处理并发任务的关键工具。协程(微线程)比操作系统线程更轻量级,通过`async def`定义并在遇到`await`表达式时暂停执行。异步函数利用`await`实现任务间的切换。事件循环作为异步编程的核心,负责调度任务;`asyncio`库提供了事件循环的管理。Future对象则优雅地处理异步结果。掌握这些概念,可使代码更高效、简洁且易于维护。
10 1
|
11天前
|
Python
[oeasy]python035_根据序号得到字符_chr函数_字符_character_
本文介绍了Python中的`ord()`和`chr()`函数。`ord()`函数通过字符找到对应的序号,而`chr()`函数则根据序号找到对应的字符。两者互为逆运算,可以相互转换。文章还探讨了单双引号在字符串中的作用,并解释了中文字符和emoji也有对应的序号。最后总结了`ord()`和`chr()`函数的特点,并提供了学习资源链接。
16 4
|
14天前
|
Java Python
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
【9月更文挑战第18天】在 Python 中,虽无明确的 `interface` 关键字,但可通过约定实现类似功能。接口主要规定了需实现的方法,不提供具体实现。抽象基类(ABC)则通过 `@abstractmethod` 装饰器定义抽象方法,子类必须实现这些方法。使用抽象基类可使继承结构更清晰、规范,并确保子类遵循指定的方法实现。然而,其使用应根据实际需求决定,避免过度设计导致代码复杂。
|
16天前
|
Python
全网最适合入门的面向对象编程教程:Python函数方法与接口-函数与方法的区别和lamda匿名函数
【9月更文挑战第15天】在 Python 中,函数与方法有所区别:函数是独立的代码块,可通过函数名直接调用,不依赖特定类或对象;方法则是与类或对象关联的函数,通常在类内部定义并通过对象调用。Lambda 函数是一种简洁的匿名函数定义方式,常用于简单的操作或作为其他函数的参数。根据需求,可选择使用函数、方法或 lambda 函数来实现代码逻辑。
|
3天前
|
Python
Python量化炒股的获取数据函数— get_billboard_list()
Python量化炒股的获取数据函数— get_billboard_list()
下一篇
无影云桌面