python函数 位置参数,关键字参数,可变参数优先级

Posted 安迪_963

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python函数 位置参数,关键字参数,可变参数优先级相关的知识,希望对你有一定的参考价值。

def fun(arg,args=1,*arg,**keywords):

python 一共有这四类参数,第一类最常见,不用多说,第二类,关键字参数,python能通过关键字找到参数,python函数的这种特性使得函数参数更加灵活,不一定要按顺序来传,第三类:一个星号是将非关键字参数收集起来,以tuple的形式保存,第四类则必须要提供”传递参数名=传递参数值”形式传递参数。

至于怎么传,相信大家都知道,这里不多说。

要说明的是在python2中这四类参数传递时是有优先顺序的,不管是定义函数,还是传递参数时都有这个顺序问题。

下面是今天被 问到的问题:

 1 def Fun(*param,base=3):
 2     result = 0
 3     for each in param:
 4         result += each
 5 
 6     result *= base
 7    
 8     print(result is , result)
 9 
10 Fun(5,1, 2, 3, 4,base=5)

报错:

def Fun(*param,base=3):
                      ^
SyntaxError: invalid syntax

 

按照我上面的说法,这样很明显是不对的,即顺序不对。那么是不是把base,param对调就行了呢?显然不是,上面已经说明,在传递参数时,优先级同样适用。所以

Fun(base=5,5,1, 2, 3, 4,5)这样传递时仍然是不行的,因为顺序不对嘛。这就有点尴尬嘛,要想同时兼顾两者,一种解决办法是:Fun(5,5,1, 2, 3, 4,5)
注:上面代码中的问题在Python3中好像进行了优化,不存在语法错误了。

以上是关于python函数 位置参数,关键字参数,可变参数优先级的主要内容,如果未能解决你的问题,请参考以下文章

python函数 位置参数,关键字参数,可变参数优先级

python函数中的位置参数默认参数关键字参数可变参数区别

Python的位置参数默认参数关键字参数可变参数

[python][oldboy]关键字参数和位置参数,默认参数,可变长参数(无名,有名)

Python函数中的可变长参数_速记

python位置参数默认参数关键字参数可变参数的区别