一文看懂 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,这是两个不同的概念不要混淆了。
相关文章
- Python中的函数与方法 以及Bound Method和Unbound Method
- 一文贯通python文件读取
- Python 中的异步编程:Asyncio
- 7个你现在就该学习Python的理由
- 提高Python运行效率的六个窍门
- Python数据科学:神经网络
- 一篇文章看懂大数据分析就业前景及职能定位
- R和Python中的文本挖掘:8个入门小贴士
- 告诉你为什么Python有点慢,但我却无所谓?
- 专注学习DevOps编程语言Top 5推荐
- Python发送邮件脚本
- Python多进程并行编程实践: mpi4py 的使用
- Python语言在未来的发展前景
- Python vs Ruby: 谁是最好的 web 开发语言?
- Python对Ruby:谁在Web开发领域更胜一筹?
- Python一行代码完成并行任务
- Python开发者2017应该关注的七个类库
- python爬虫入门基本知识
- 在终端中优雅地编写Python
- Python机器学习实战:信用卡欺诈检测