1

假设我有一个函数 foo(x,k) 并假设 x 是一个列表。我希望 k 默认为列表的长度。我只是写:

def foo(x, k=1):
  k = len(x)
  ..
end

我只想用一个参数运行 foo,即 x。

4

3 回答 3

9

你应该做:

def foo(x, k=None):
    if k is None:
        k = len(x)
    ...

请注意,这可以更紧凑:

def foo(x, k=None):
    k = k or len(x)
于 2013-02-26T03:56:24.047 回答
2

做就是了:

def foo(x):
    k = len(x)

您不必将 k 传递给此函数。您可以只使用局部变量 k。

如果你必须使用 k 那么你可以这样做:

def foo(x,k):
    k = len(x)

虽然这没有任何目的。

于 2013-02-26T03:59:20.933 回答
0

如果您的意图是使用默认的无特定顺序的可选 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方法中速度和参数位置的其他考虑的权衡。

于 2013-02-26T04:03:37.630 回答