Python中函数的参数-arguments

概括起来,Python中函数的定义形式和调用形式主要有以下几种形式:数组

# 函数的定义形式
def func(name)               # 匹配positional参数或者keyword参数
def func(name=value)    # 若是不传,有默认参数
def func(*name)        # 将额外的positional参数转换成一个tuple,而后赋给name
def func(**name)     # 将额外的keyword参数转换成一个dictionary,而后赋给name
def func(*other, name)  # Python 3.X中定义keyword-only参数的形式,Python 2.X中不支持,此时,name必定要以keyword的形式传递
def func(*, name)     # Python 3.X中定义keyword-only参数的形式, Python 2.X中不支持,此时, name必定要以keyword的形式传递


# 函数的调用
func(name)        # 以positional参数调用
func(name=value)   # 以keyword参数调用
func(*iterable)     # 将iterable对象转换成一连串单个positional参数进行调用
func(**dictionary) # 将dictionary转换成keywrod参数进行调用

这里须要注意3点:app

1 在Python 2.X中(在Python 3.X中,这种形式已经不容许了),还有一种定义函数的方式,就是将函数的参数定义成一个tuple,那么,当调用函数的时候,传递一个结构同样的tuple参数,这个tuple参数就会被unpack:函数

# 定义
def func((a, (b, c)) # 调用
func((1, (2, 3))   # a=1, b=2, c=3
func((1, [2, 3]))  # a=1, b=2, c=3,这样调用也是能够的
func((1, 'mn'))   # a=1, b='m', c='n', 这样也能够,也就是说调用的时候只要是序列均可以

# 可是定义的时候只能是tuple,不能出现其余序列,好比数组,下面的情形是不对的
def func((a, [b, c]))

2 对于调用形式func(*name)和func(**name),也可使用apply函数达到一样的效果,可是apply函数只能在Python 2.X中使用,在Python 3.X中被移除了,使用形式为:spa

def func(*a, **b) a=(1, 2) b={'c':3, 'd':4} func(*a, **b)      # Python 2.X和Python 3.X均支持
 apply(func, a, b) # 仅Python 2.X支持,效果同样

3 对于默认参数,尤为要注意可变对象,每一次以默认形式象调用函数,这个默认的参数会被重用,而不会重置:code

def func(a=[]): a += [1] print(a) >>>func() [1] >>>func()  # 此时a的值是[1]
[1, 1] >>>func()  # 此时a的值是[1, 1]
[1, 1, 1]

 

函数定义时参数的顺序以及函数调用时参数的顺序对象

Python中,定义函数和调用函数时,参数的顺序有必定的规则,若是不符合规则,Python会报错:blog

1 在定义函数时,参数的顺序为:positional参数(name),默认参数(name=value),*name形式(或者只有一个*,可是只在Python 3.X中支持),name或者name=value形式(都只在Python 3.X中支持,叫keyword-only参数,后面name=value是赋默认值),**name形式;it

2 在调用函数时,参数的顺序为:positional参数(name),keyword参数(name=value)或者*name形式,**name形式io

总之,**name不管在定义函数时,仍是在调用函数时,都只应出如今最后。class

 

函数参数的匹配步骤

Python内部,对于函数参数的匹配大体分为5步:

1 首先匹配positional参数(name)

2 匹配keywrod参数(name=value)

3 将额外的非keyword参数匹配给*name形式

4 将额外的keyword参数匹配给**name形式

5 若是有默认值,给未传递的参数赋默认值

通过上述步骤以后,Python还须要确保,每个参数,只匹配了一个值,不然,就会报错。

相关文章
相关标签/搜索