• 一文看懂 Python 中的函数参数


    函数定义中的参数也就是形式参数,规定了在调用函数时如何传递实际参数以及这些参数有无默认值。

    实参传递方式

    def f(a):
        print(a)
    

    实参传递方式有两种,位置和关键字。对于上面定义的函数 f,形如 f(1) 这种调用是通过位置的方式传参,形如 f(a=1) 这种调用是通过关键字的方式传参,两种传参方式都可以是因为形参 a 没有对传参方式做限制。

    Python 也提供了一些方式用来限制参数的传递方式。

    仅限位置参数

    def f(a, b, /, d):
    	pass
    

    对于这种定义,斜杠 / 之前的参数 a 和 b 只能通过位置参数的方式传参,叫做仅限位置参数,斜杠 / 之后的参数 d 既可以通过位置也可以通过关键字的方式传参,所以 f(1, 2, d=3)f(1, 2, 3) 都可以调用函数。

    仅限关键字参数

    def f(a, b, *, d):
    	pass
    

    定义中星号 * 后面的参数 d 只能通过关键字的方式传参,叫做仅限关键字参数,星号 * 前面的参数 a 和 b 既可以通过位置也可以通过关键字的方式传参,所以 f(1, 2, d=3)f(1, b=2, d=3) 都可以调用函数。

    当然星号 * 和斜杠 / 也可以同时定义,如下

    def f(a, /, b, *, c):
    	pass
    

    a 只能通过位置传参,c 只能通过关键字传参,b 都可以,所以只有 f(1, 2, c=3)f(1, b=2, c=3) 这两种调用方式。

    参数的默认值

    函数定义中无论规定形参的传递方式是哪种,都可以通过 k=v 的形式设置参数的默认值,如果有参数设置了默认值,那么在调用函数的时候可以省略对该参数的传值。所以上面说的实参传递方式,更准确的描述是:如果仅限关键字参数没有设置默认值,那么只能通过关键字的形式传参,否则可以省略该参数的传递,如果仅限位置参数没有设置默认值,那么只能通过位置的形式传参,否则可以省略该参数的传递。

    下面看一个例子作总结

    def f(a, b=10, /, c=1, *, d=20, e):
    	pass
    

    b 是仅限位置参数有默认值,e 是仅限关键字参数没有默认值。函数定义中出现的 k=v 这种形式表示参数 k 有默认值 v,函数调用中出现的 k=v 的形式表示通过关键字的方式给参数 k 传递参数值 v,这是两个不同的概念不要混淆了。

  • 相关阅读:
    CSS性能优化的几个技巧
    SpringBoot中日志的使用log4j
    Python 搭建虚拟环境
    [附源码]java毕业设计健身健康规划系统
    研究生常用工具
    element中el-switch用法汇总(拓展:el-switch开关点击弹出确认框时,状态先改变,点击确认/取消失效,怎么解决?)
    matlab层次分析法模型及相关语言基础
    mysql caching_sha_password
    Jenkins CI/CD 持续集成专题二 Jenkins 相关问题汇总
    这是Facebook母公司 关于元宇宙的80万亿美元豪赌
  • 原文地址:https://www.cnblogs.com/zikcheng/p/17118282.html