失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Python函数的故事: 位置参数还是关键字参数?

Python函数的故事: 位置参数还是关键字参数?

时间:2020-09-14 17:09:11

相关推荐

Python函数的故事: 位置参数还是关键字参数?

今天我们接着讲 Python 函数的故事。今天要介绍Python函数的两个主题,一是参数的分类和使用,二是缺省值参数的使用。

三. Python函数的参数,是用位置参数还是关键字参数?

首先我们看看下面一张图,来学习一下定义和调用函数的基本术语。图中的形式参数就是:在定义函数的时候表示对应的实际参数的标识符。实际参数就是:在调用函数的时候,在函数名后面的括号里面的值或变量或表达式。

图7. Python函数的形参与实参

然后我们通过一小段代码,来看看什么叫做位置参数( Positional Arguments ),什么叫关键字参数( Keyword Arguments )。

8.Python函数的位置参数与关键字参数

图8中的代码行1-3定义了一个简单的函数foo1,按顺序排列有三个形参,a, b, c,调用的时候, 传递三个实参1,2,3 给形参。实参和形参怎么对应呢?Python提供了两种对应方式。图8中的代码行5给出的是第一种方式,也就是按形参出现的位置与实参出现的位置一 一对应,这时候我们就说,a, b, c对应的实参是位置参数。图8中的代码行6则是另一种形参与实参的对应方式,那就是"形参 = 实参"的模式,这时候我们就说,a, b, c对应的实参是关键字参数,所谓的关键字,就是形参的名称。因为有关键字作区分,所以,关键字参数的位置顺序就不重要了。注意,位置参数与关键字参数是在函数调用的时候采用的术语,从函数的定义是看不出来哪些是位置参数哪些是关键字参数的。

能不能在调用函数的时候,有些实参采用关键字参数的方式,而另一些实参采用位置参数的方式呢?可以的。请看图8中的代码行7,对应形参a的实参3就是位置参数,实参 4 和 5作为关键字参数,分别对应b,c ,而且c在前,b在后,与定义函数时形参先b后c的顺序不一样。这就表明,关键字参数的位置顺序真的不重要。

那么关键字参数与位置参数之间的顺序是否重要呢?这个很重要。请看请看图8中的代码行8,如果像那样写代码:foo1( c=4, 5, b=3 ),其本意是要用关键字参数的方式给c,b 赋值实参,剩下的一个5,肯定就是想给形参a了。然后,就会出现语法错误提示:

SyntaxError:positional argument follows keyword argument

图9.位置参数与关键字参数语法错误

也就是说,关键字参数之后不能再有位置参数了。所以一旦某个实参采用了关键字参数,则后面所有的实参都应该是关键字参数了。关键字参数之前都是位置参数,其位置顺序与形参位置一 一对应。

总结一下,函数的实参分两段,前面一段是位置参数,实参靠位置与形参一 一对应;后面一段是关键字参数,靠关键字与形参一一对应,而不是靠参数位置。

四. Python函数参数的缺省值

假设有个程序,其中有个函数的某个参数表示“国籍”,因为程序用于中国,所以这个参数的取值大多数时候就是‘中国’。这种情况下,我们可能想把这个参数默认就等于‘中国’,而不是每次调用都重复输入‘中国’。只有当某次调用遇到一个非中国籍的用户时,我们才输入别的国籍名称。这种情况就是把参数的缺省值设为‘中国’。

看这个函数的定义第一句:

def foo2(a, b, c="verygood", d ,e=9876):

我们会得到以下语法错误提示:

SyntaxError: non-default argument follows default argument

这个提示告诉我们,有缺省值的参数 ( 简称 缺省值参数 ) 的后面不能有无缺省值参数。也就是说,在函数的定义中,缺省值参数必须摆在无缺省值的形参的后面。

图10.缺省值参数的使用

图10给出了使用缺省值参数的几种调用方式,对应的输出写在注释里面,有兴趣的读者可以自己品读一下。

于是,关于 Python 函数的参数,我们有了三条规则:1.定义函数的时候,缺省值参数必须放在形参列表的最后;2.调用函数的时候,关键字参数必须在位置参数的后面;3.实参形参对应的方式是:位置参数看位置,关键字参数看关键字。

如果觉得《Python函数的故事: 位置参数还是关键字参数?》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。