假设我有一个函数foo(x,k)并假设x是一个列表。我希望k默认为列表的长度。我只想写:
def foo(x, k=1):
k = len(x)
..
end
我只想用一个参数运行foo,即x。
答案 0 :(得分:9)
你应该这样做:
def foo(x, k=None):
if k is None:
k = len(x)
...
请注意,这可以更紧凑:
def foo(x, k=None):
k = k or len(x)
答案 1 :(得分:2)
只是做:
def foo(x):
k = len(x)
您不必将k传入此功能。你可以使用局部变量k。
如果您必须使用k,那么您可以这样做:
def foo(x,k):
k = len(x)
虽然这不起任何作用。
答案 2 :(得分:0)
如果您的目的是在默认情况下使用k=len(l)
没有特定顺序的可选k,则可以使用可选的关键字参数,如下所示:
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的approach中速度和参数位置的其他考虑的权衡。