短いリストの場合、これは問題ではなく、入力するのに正確に2文字かかります。しかし、(私が思うに)最も一般的なユースケースstr.join()
は次のとおりです。
''.join(process(x) for x in some_input)
# or
result = []
for x in some_input:
result.append(process(x))
''.join(result)
ここで、input_dataには数千のエントリを含めることができ、出力文字列を効率的に生成したいだけです。
反復可能ではなく、受け入れられた可変引数を結合する場合、これは次のように綴る必要があります。
''.join(*(process(x) for x in some_input))
# or
''.join(*result)
これは(おそらく長い)タプルを作成し、それをとして渡すだけ*args
です。
つまり、短い場合は2文字であるのに対し、大きなデータの場合は無駄になります。
履歴メモ
(2番目の編集:すべてのリリースから欠落しているリリースを含むHISTORYファイルに基づいています。Donに感謝します。)
in関数の*args
定義はずっと前にPythonで追加されました:
==>リリース0.9.8(1993年1月9日)<==
ケース(a)は、可変長の引数リストに対応するために必要でした。現在、明示的な「varargs」機能があります(最後の引数の前に「*」を付けます)。ケース(b)は、古いクラス定義との互換性のために必要でした。リリース0.9.4までは、複数の引数を持つメソッドを "def meth(self、(arg1、arg2、...))として宣言する必要がありました。 。」。
このような関数にリストを渡す適切な方法は、組み込み関数を使用することでしたapply(callable, sequence)
。(これは、バージョン1.4のドキュメントで**kwargs
最初に見られるものについては言及していません)。
構文を使用して関数を呼び出す機能は*
、1.6のリリースノートで最初に説明されています。
apply()関数の代わりに使用できる特別な構文があります。f(* args、** kwds)はapply(f、args、kwds)と同等です。バリエーションf(a1、a2、* args、** kwds)を使用することもでき、f(args)、f( * kwds)のいずれかを除外することもできます。
しかし、バージョン2.2までは文法ドキュメントにはありません。
2.0以前str.join()
は存在すらしていなかったので、そうしなければなりませんでしたfrom string import join
。