Python3.6新特性f-string

8218 ワード

f-stringは、'f'または'F'の接頭辞を有する文字列フォント値である.この文字列は、置換フィールド、すなわち、{}で示される式を含むことができる.他の文字列のフォント値は常に定数であり、フォーマットされた文字列のフォント値は実際には実行時に評価される式です.
エスケープシーケンスは、通常の文字列のフォント値と同様に復号されます(フォント値が元の文字列として表示されない限り).復号化後、文字列の内容に使用される構文は次のとおりです.
f_string          ::=  (literal_char | "{{" | "}}" | replacement_field)*
replacement_field ::=  "{" f_expression ["!" conversion] [":" format_spec] "}"
f_expression      ::=  (conditional_expression | "*" or_expr)
                         ("," conditional_expression | "," "*" or_expr)* [","]
                       | yield_expression
conversion        ::=  "s" | "r" | "a"
format_spec       ::=  (literal_char | NULL | replacement_field)*
literal_char      ::=  

文字列は、括弧以外の部分ではその文字値で処理され、二重括弧'{{'または'}}'を除いて、対応する単一の括弧に置き換えられます.1つの左かっこ'{'は、Python式で始まる置換フィールドを示し、式の後に感嘆符'!'で示される変換フィールドがある可能性があります.その後、コロン':'で示されるフォーマットの説明子も付いてくる可能性があります.置換フィールドは右かっこ'}'で終了します.
フォーマット文字列のフォント値の式は、カッコに通常含まれるPython式と同様に処理されますが、例外は少数あります.空の式は許可されません.lambda式にはカッコを明示的に付ける必要があります.置換式には、改行(たとえば、三重引用符文字列)を含めることができますが、コメントは含まれません.各式は、文字列のフォント値をフォーマットする場所で左から右の順に評価されます.
バージョン3.7の変更:Python 3.7の前に、await式にasync for句が含まれている導出式は、具体的な実装に問題があるため、フォーマット文字列のフォント値式では使用できません.
変換子が指定されている場合、式の評価結果は変換されてからフォーマットされます.変換子'!s'は結果呼び出しstr()であり、'!r'は呼び出しrepr()であり、'!a'は呼び出しascii()である.
  • 基本用法大括{}で置換されたフィールドを表し、ここで置換された内容を直接記入
  • name = 'Jack'
    print(f"str: {name}")
    
    num = 6
    print(f"int: {num}")
    
    price = 3.33
    print(f"float: {price}")
    
  • print(f"{2 * 3}")
    
    print(f"{name.upper()}")
    
    import math
    print(f"{math.pi}")
    
    print(f"{(lambda x, y: x+y*2)(3, 2)}")
    

    Lambda式にはカッコを明示的に付け、2番目のカッコは入力パラメータを表します.
  • 充填と遮断
  • デフォルトではスペース入力
  • >:文字列の左側に<:>を入力
  • 数字表示文字列長
  • 文字列の長さより大きい文字列の長さは塗りつぶし、小さい場合は切り捨て
  • slogan = 'Python NB'
    print(f"{slogan:>20}")
    # '           Python NB'
    print(f"{slogan:<20}")
    # 'Python NB           '
    print(f"{slogan:^20}")
    # '     Python NB      '
    
    #         
    print(f"{slogan:-^20}")
    # '-----Python NB------'
    
  • 数値有効フォーマット記述子のみ
  • a = 1
    b = -9
    print(f"{a:+}", f"{b:+}")
    # ('+1', '-9')
    print(f"{a:-}", f"{b:-}")
    ('1', '-9')
    print(f"{a: }", f"{b: }")
    (' 1', '-9')
    
  • 幅と精度のフォーマット記述子:小数点数を保持
  • フォーマット記述子
    意味
    width
    整数width幅の指定
    0width
    整数widthは幅を指定し、0は最高位を表す0で幅を補う
    width.precision
    整数widthは幅を指定し、整数precisionは表示精度を表す
    a = 123.456
    # width
    print(f'{a:10}')
    # '   123.456'
    
    # 0width
    print(f'{a:010}')
    # '000123.456'
    
    # width.precision
    print(f"{a:8.2f}")
    # '  123.46'
    
  • 時間対象に対する年月日時分秒の抽出
  • from  datetime import *
    d = date.today()
    print(d)
    # datetime.date(2020, 5, 13)
    print(f"{d:%Y-%m-%d}")
    # '2020-05-13'