假设我有一个函数 foo(x,k) 并假设 x 是一个列表。我希望 k 默认为列表的长度。我只是写:
def foo(x, k=1):
k = len(x)
..
end
我只想用一个参数运行 foo,即 x。
假设我有一个函数 foo(x,k) 并假设 x 是一个列表。我希望 k 默认为列表的长度。我只是写:
def foo(x, k=1):
k = len(x)
..
end
我只想用一个参数运行 foo,即 x。
你应该做:
def foo(x, k=None):
if k is None:
k = len(x)
...
请注意,这可以更紧凑:
def foo(x, k=None):
k = k or len(x)
做就是了:
def foo(x):
k = len(x)
您不必将 k 传递给此函数。您可以只使用局部变量 k。
如果你必须使用 k 那么你可以这样做:
def foo(x,k):
k = len(x)
虽然这没有任何目的。
如果您的意图是使用默认的无特定顺序的可选 k,k=len(l)
则可以使用可选的关键字参数,如下所示:
def f(l,**kwargs):
k=kwargs.get('k',len(l))
# if k is in kwargs, it overrides the default of len(l)..
print 'l={}, len(l)={}, k={}'.format(l,len(l),k)
f([1,2,3])
f([1,2,3],k=1)
印刷:
l=[1, 2, 3], len(l)=3, k=3
l=[1, 2, 3], len(l)=3, k=1
正如评论中所指出的,这是与 David Robinson方法中速度和参数位置的其他考虑的权衡。