web-dev-qa-db-ja.com

名前付きパラメーターの文字列フォーマット?

私はそれが本当に簡単な質問であることを知っていますが、それをグーグルする方法がわかりません。

どのようにできるのか

print '<a href="%s">%s</a>' % (my_url)

そのため my_urlは2回使用されますか?私は%sそして、paramsでdictを使用しますが、適切な構文がわかりませんか?


参考までに、私はmy_urlパラメータで2回ですが、それはポイントではありません:)

127
mpen
print '<a href="%(url)s">%(url)s</a>' % {'url': my_url}
214

Python 2.6+およびPython 3では、新しい文字列フォーマット方法を使用することを選択できます。

print('<a href="{0}">{0}</a>'.format(my_url))

これにより、引数を繰り返す必要がなくなります。または

print('<a href="{url}">{url}</a>'.format(url=my_url))

名前付きパラメーターが必要な場合。

print('<a href="{}">{}</a>'.format(my_url, my_url))

これは厳密に位置指定であり、format()引数はPythonという名前の引数が最初に来て、その後に名前付き引数が続き、その後に* args(リストまたはタプル)、そして* kwargs(あなたにとって良いことを知っているなら文字列でキー付けされた辞書)補間点はまずラベルの名前付き値を代入することで決定され、それから残りのものから位置付けられます。 ...

print('<a href="{not_my_url}">{}</a>'.format(my_url, my_url, not_my_url=her_url))

しかし、これは...

print('<a href="{not_my_url}">{}</a>'.format(my_url, not_my_url=her_url, my_url))
67
Greg Ball

Python 3.6+のソリューション

Python 3.6では、リテラル文字列フォーマットが導入されているため、文字列の外側で名前付きパラメーターを繰り返すことなく、名前付きパラメーターをフォーマットできます。

print(f'<a href="{my_url:s}">{my_url:s}</a>')

これはmy_urlを評価するため、定義されていない場合はNameErrorを取得します。実際、my_urlの代わりに、(:sフォーマットコードのために)文字列に評価される限り、任意のPython=式を記述できます。文字列ではない可能性のある式の結果の文字列表現が必要な場合は、通常のリテラル前の文字列フォーマットと同様に、:s!sに置き換えます。

リテラル文字列の書式設定の詳細については、最初に導入された PEP 498 を参照してください。

34
gerrit

HTMLページを構築するには、単純な文字列補間ではなく、テンプレートエンジンを使用します。

5
Mike Graham

あなたは構文に夢中になります。

また、C#6.0では、EcmaScript開発者もこの構文を使い慣れています。

In [1]: print '{firstname} {lastname}'.format(firstname='Mehmet', lastname='Ağa')
Mehmet Ağa

In [2]: print '{firstname} {lastname}'.format(**dict(firstname='Mehmet', lastname='Ağa'))
Mehmet Ağa
5
guneysus

辞書の方法と同様に、次の形式を知っていると便利です。

print '<a href="%s">%s</a>' % (my_url, my_url)

ここでは少し冗長であり、辞書の方法はコードを変更するとき間違いなく間違いが少ないですが、複数の挿入にタプルを使用することはまだ可能です。最初 %sは、タプルの最初の要素、2番目の%sは、タプルの2番目の要素に置き換えられ、タプルの各要素にも同様に続きます。

2
Ponkadoodle