one引数のフォーマットは、文字列でone _%s
_を使用して実行できることがわかっています。
_>>> "Hello %s" % "world"
'Hello world'
_
2つの引数の場合、2つの_%s
_(duh!)を使用できます。
_>>> "Hello %s, %s" % ("John", "Joe")
'Hello John, Joe'
_
では、可変数の引数をフォーマットするにはどうすればよいですか基本文字列内で、フォーマットする引数の数に等しい_%s
_の数を明示的に定義する必要なしに?このようなものが存在する場合、それは非常にクールです:
_>>> "Hello <cool_operator_here>" % ("John", "Joe", "Mary")
Hello JohnJoeMary
>>> "Hello <cool_operator_here>" % ("John", "Joe", "Mary", "Rick", "Sophie")
Hello JohnJoeMaryRickSophie
_
これは可能ですか、それとも私ができる唯一のことは次のようなことです:
_>>> my_args = ["John", "Joe", "Mary"]
>>> my_str = "Hello " + ("".join(["%s"] * len(my_args)))
>>> my_str % Tuple(my_args)
"Hello JohnJoeMary"
_
注:I (必要を使用して_%s
_文字列フォーマット演算子を使用します。
[〜#〜]更新[〜#〜]:
別のライブラリの関数は、フォーマットされていない文字列と引数を渡してフォーマットすることを前提として、その演算子を使用して文字列をフォーマットしますが、(必要に応じて)チェックと修正を行うため、_%s
_と一緒にする必要があります。実際にフォーマットを行う前の引数。
だから私はそれを呼ぶ必要があります:
_>>> function_in_library("Hello <cool_operator_here>", ["John", "Joe", "Mary"])
"Hello JohnJoeMary"
_
ご協力いただきありがとうございます!
リストでstr.join()
without文字列フォーマットを使用し、次にresultを補間します。
_"Hello %s" % ', '.join(my_args)
_
デモ:
_>>> my_args = ["foo", "bar", "baz"]
>>> "Hello %s" % ', '.join(my_args)
'Hello foo, bar, baz'
_
引数の一部がまだ文字列でない場合は、リスト内包表記を使用します。
_>>> my_args = ["foo", "bar", 42]
>>> "Hello %s" % ', '.join([str(e) for e in my_args])
'Hello foo, bar, 42'
_
またはmap(str, ...)
を使用します:
_>>> "Hello %s" % ', '.join(map(str, my_args))
'Hello foo, bar, 42'
_
あなたはあなたの関数で同じことをするでしょう:
_function_in_library("Hello %s", ', '.join(my_args))
_
補間引数リストでjoin
を使用できないという(かなり恣意的な)制限によって制限されている場合は、代わりにjoin
を使用してフォーマット文字列を作成します。
_function_in_library("Hello %s" % ', '.join(['%s'] * len(my_args)), my_args)
_