Python基礎——positional argument vs keyword argument

Inside_Zhang發表於2015-11-25

python強大的型別推導,有時也會帶來一些副作用,比如有時編譯器會報如下錯誤:

TypeError: Function takes at most 1 positional arguments (2 given)
# 函式最多接受一個位置引數,卻提供了兩個

所謂positional argument位置引數,是指用相對位置指代引數。關鍵字引數(keyword argument),見名知意使用關鍵字指代引數。位置引數或者按順序傳遞引數,或者使用名字,自然使用名字時,對順序沒有要求。

A positional argument is a name that is not followed by an equal assign(=) and default value.

A keyword argument is followed by an equal sign and an expression that gives its default value.

以上的兩條引用是針對函式的定義(definition of the function)來說的,與函式的呼叫(calls to the function),也即在函式的呼叫端,既可以使用位置標識引數,也可使用關鍵字。

def foo(x, y):
    return x*(x+y)
print(foo(1, 2))            # 3, 使用positional argument
print(foo(y=2, x=1))        # 3,named argument

一個更完備的例子如下:

def fn(a, b, c=1):
    return a*b+c
print(fn(1, 2))          # 3, positional(a, b) and default(c)
print(fn(1, 2, 3))       # 5, positional(a, b)
print(fn(c=5, b=2, a=2)) # 9, named(b=2, a=2)
print(fn(c=5, 1, 2))     # syntax error
print(fn(b=2, a=2))      # 5, named(b=2, a=2) and default
print(fn(5, c=2, b=1))   # 7, positional(a), named(b).
print(fn(8, b=0))        # 1, positional(a), named(b), default(c=1)

相關文章