関数 foo(x,k) があり、x がリストであるとします。k をデフォルトでリストの長さにしたい。私はただ書くだけですか:
def foo(x, k=1):
k = len(x)
..
end
1 つの引数、つまり x を指定して foo を実行したいだけです。
関数 foo(x,k) があり、x がリストであるとします。k をデフォルトでリストの長さにしたい。私はただ書くだけですか:
def foo(x, k=1):
k = len(x)
..
end
1 つの引数、つまり x を指定して foo を実行したいだけです。
やったほうがいい:
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 のアプローチにおける速度とパラメーターの位置に関する他の考慮事項とのトレードオフです。