Pythonのstr.format()の詳しい説明

高洛峰
高洛峰オリジナル
2017-03-13 09:22:242536ブラウズ

この記事では、主に pythonプログラミングの str.format() の高度な使用法を詳しく紹介しており、サンプルも付いているので気に入っていただければ幸いです。 .format

の紹介 Python では、+ を使用して
strings
を連結することができ、これは単純な場合にうまく機能します。しかし、複雑な文字列の連結を実行する必要がある場合、まだ + を使用して完成させると、コードがわかりにくくなるだけでなく、コードの保守も困難になります。現時点では、この方法では不十分です。

たとえば、次のようなレコードを印刷したいとします: User:John has completed

Action

:payment at

Time

:13:30:00 プラス記号を使用すると、次の形式:

print "User:" + user_name + " has completed Action:" + \ 
      action_name + " at Time:" + current_time

将来このコードに戻って読んだ場合、その出力形式を直観的に確認するのは難しく、それを変更するのは比較的面倒になるでしょう。


代わりに % を使用できます:

print "User:%s has completed Action:%s at Time:%s" % \ 
    (user_name, action_name, current_time)

今回は、コードがより明確かつ簡潔になります。


しかし、Python は別のシンプルでエレガントな実装方法を提供しており、これはより公式に推奨されている方法でもあります: str.format() を使用して文字列をフォーマットします:

print "User:{} has completed Action:{} at Time:{}".format( 
    user_name, action_name, current_time)

str.format は両方とも可能です。また、面倒な文字列連結操作を行わずに複雑な文字列置換を実行することもできます。 Python の組み込み型 str と unicode はどちらも、

文字列のフォーマット
を行う str.format() の使用をサポートしています。

次に、str.format() の具体的な使用法について詳しく説明します。

2. str.format の基本構文

フォーマットされた文字列は、置換される文字列である置換フィールドを中括弧 {} で囲みます。中括弧で囲まれていない文字は、結果にそのまま表示されます。
2.1. 位置

index の使用

次の 2 つの書き方は同等です: "Hello, {} and {}!".format("John", "Mary")

"Hello, {0 } と {1}!".format("John", "Mary")

対象文字列のインデックスは中括弧内に記述しても省略できます。省略した場合は、書式括弧で囲まれた対象文字列の順に置換されます。


2.2. キーワードインデックスの使用

位置を介してターゲット文字列を指定することに加えて、キーワードを介して指定することもできます。

例:

"Hello, {boy} and {girl}!".format(boy="John", girl="Mary")

キーワードインデックスを使用する利点は、パラメータの位置を気にする必要がなく、文字列の最終結果が一目でわかることです。将来のコードのメンテナンスでは、文字列に対して対応するパラメーターを 1 つずつ検索する必要がなく、対応するパラメーターをすばやく変更できます。


注: 文字列自体に中括弧が含まれている場合は、中括弧を 2 回繰り返してエスケープする必要があります。たとえば、文字列自体に { が含まれている場合、これが置換フィールドを囲むために使用される中括弧ではなく通常の文字であることを Python に知らせるために、単に {{ に書き換えます。

3. str.format の高度な構文

str.format は、日常業務で発生するフォーマットされた出力
を完了するのに十分強力です。この方法に習熟すると、将来の文字列処理のための強固な基盤を築き、時間を大幅に節約できます。

3.1. プロパティまたはパラメータの要素へのアクセス

str.format を使用して文字列をフォーマットする場合、通常はターゲット文字列をパラメータとして format メソッドに渡します。実際、フォーマット文字列内のパラメータの属性または要素にアクセスすることもできます。 "My car is {0.color}.".format(black_car)

"The first students is {student[ 0]} .".format(student=stu_

list

)

"John is {d[john]} years old.".format(d=age_dict)
3.2. パラメータ出力変換

パラメータ文字列出力は、そのパラメータによって実装されます。デフォルトでは独自の形式メソッド。つまり、Python は置換フィールドの代わりにパラメーターの形式出力を使用します。 str() または repr() を呼び出してパラメータを変換したい場合は、変換フラグを追加することで実行できます:

# call str() on argument
"It's a {0!s}."

#call repr() on argument
"We can get info from {name!r}."

4. str.format 一般形式

フォーマットされた形式の一般形式文字列は次のとおりです:
"... {field_name!conversion:format_spec} ..."

上記のコードからわかるように、フォーマット文字列は field_name、conversion、format_spec の 3 つの部分に分割できます。それぞれ、置換フィールド名 (インデックス)、変換フラグ、フォーマットの説明に対応します。このうち、フィールド名は必須ですが、後の 2 つはオプションです。変換フラグは感嘆符の後に続き、形式の説明はコロンの後に続きます。

前に述べたように、フィールド名は位置インデックスとキーワード インデックスの両方にすることができます。フィールド名の後にドットを続けて属性にアクセスしたり、角括弧を続けて要素にアクセスしたりできます。

ここでは、形式の説明 (format_spec) に焦点を当てます。

形式の説明には、fill、align、sign、width、precision、type の 6 つのオプションが含まれています。 それらの位置関係は次のとおりです:

[[fill]align][sign][#][0][width][,][.precision][type]
fill
は任意の文字にすることができ、デフォルトは空間。

align
最小幅が指定されている場合にのみ有効です。

5f3b293385e952b789e5f7c700aff663 右揃え
= 記号と数字の間に埋め込み文字を挿入します (例: +0001234)。 中央揃え
記号
数字のみに有効

+ すべての数字すべて符号付きです

- 負の数値のみが符号付きです (デフォルト オプション)
つまり、正の数値の前にはスペースがあり、負の数値の前には符号が付きます
'#'
整数にのみ有効です

バイナリで自動的に変換されます8 進数および 16 進数 システム値の前に、対応する 0b、0o、0x を追加します。

','

3 つの数字ごとに , 区切り文字を自動的に追加します。

width

最小幅を定義する 10 進数。指定しない場合は、コンテンツの幅によって決まります。

配置が指定されていない場合は、width の前に 0 を追加して自動的に 0 を埋めることができます。これは、fill を 0 に設定し、align を = に設定するのと同じです。

精度

浮動小数点数の精度、または文字列の最大長を決定するために使用されます。整数値には使用できません。

type

パラメータのタイプを決定します。デフォルトは文字列である s です。

整数出力タイプ:

b: バイナリ形式で出力

c: 整数を対応する Unicode 文字に変換
d: 10 進数で出力 (デフォルト オプション)
o: 8 進数で出力
x: 16 進数の小文字で出力
メソッド出力、指数部を表すために e を使用します。デフォルトの精度は 6
E: e と同じですが、指数部を表すために大文字の E を使用します
f: 値を固定小数点形式で出力します。デフォルトの精度は 6
F: f

g : 一般形式と同じ。指定された精度 p >= 1 の場合、値の p 桁の有効桁を取得し、固定小数点または科学的表記法で出力します (デフォルト オプション)

G: 一般形式。値が大きすぎる場合は g と同じ 指数部を表すのに E を使用します

n: g と同じですが、各 3 桁の数値を区切るために現在の環境の区切り文字を使用します

%: の形式を使用しますパーセント値を出力し、fマークを設定します

以上がPythonのstr.format()の詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。