Python の f''、str.format()、および str%() の文字列フォーマットの詳細 (1)-----プレースホルダーと関数 str()、repr()、ascii()、オブジェクト参照と説明

目次
1. フォーマットプレースホルダーと関数 str()、repr()、ascii()
(1) フォーマットプレースホルダー (フォーマットコンバーター)
(2) 関数 str()、repr()、ascii()
2. f ' 内のオブジェクトへの参照'、str.format()、str%() の書式式
3. f''、str.format()、str%() の書式式に記述された文字を追加します。

Python の f''、str.format()、str%() の文字列フォーマットの詳細な説明

       

       場合によっては、() 出力を出力するときに、出力が要件を満たすように、または理解のために結果をより適切に提示する (つまり、出力結果の読みやすさを高める) ために、オブジェクトを処理または記述する必要があります。この時点では、次のことができます。 print の印刷オブジェクトに関連する設定をいくつか行い、print の印刷出力が印刷出力要件を満たす特定の形式で出力されるようにします。通常、f''、str.format()、および str%( の文字列を使用します。 ) print の印刷効果を実現するための書式設定 (書式設定された文字列、書式設定された出力)。もちろん、f''、str.format()、および str%() は他のシナリオでも使用できます。f'' 文字列フォーマットは、f-string 文字列フォーマットと呼ばれることがよくあります。

1. プレースホルダーと関数 str()、repr()、ascii() のフォーマット

       f''、str.format()、および str%() の文字列書式設定を具体的に使用するには、いくつかのプレースホルダーが関係します。そのため、ここでは Python 形式のプレースホルダーを示します。これら 3 つの文字列書式設定は、f 書式設定、書式書式設定、および % 演算子書式設定と省略することもできます。

(1)フォーマットプレースホルダ(フォーマット変換文字)

        形式プレースホルダー。C 言語に由来する名前で、この位置に入力または出力があることを示します (たとえば、scanf()、printf() などの関数で使用されます)。プレースホルダーは、特定の形式のデータがPython では形式変換文字としても理解され、オブジェクトに関連する変換を実行することを意味します。ここでは以前の名前が使用されます。次の表 1-1 に、一般的に使用されるいくつかの形式プレースホルダ (形式変換文字) を示します。

表1-1 よく使用されるフォーマットプレースホルダ(フォーマット変換文字)

s

文字列 (str() で表示)。ns も使用できます。n は出力幅、つまり出力占有者数を表します。

r

文字列(repr()で表示)、nrも使用可、nは上記と同じ

ある

文字列(ascii()表示)、na、nも同様に使用可能

c

単一の文字、nc、n も上記と同様に使用可能

b

2 進整数、f''、str.format() でのみ使用可能、nb も使用可能、n は上記と同じ

d

10 進整数。上記と同じ nd、n も使用可能

ああ

8 進整数、no、n も使用可能、上記と同じ

バツ

16 進整数。X または nx を使用できます。n は上記と同じです。

f

10 進浮動小数点数、つまり 10 進数

.mf

mは精度で、小数点以下 m 桁を保持することを意味します。

n.mf

nは出力幅、つまり出力位置の数を示します。m は小数点以下 m 桁が予約されていることを示し、.m はデフォルトに設定できます。

e

科学表記、指数形式、底は e (10 に相当)、E も使用可能

。自分

m は小数点以下 m 桁を保持することを意味します

nは出力幅、つまり出力位置の数を示します。m は小数点以下 m 桁が予約されていることを示し、.m はデフォルトに設定できます。

g

指数が -4 未満または 5 より大きい場合は e を使用し、それ以外の場合はデフォルトで d または f を使用するか、G を使用します。

.mg

m 個の有効数字 (数値) を予約します。指数が -4 より小さいか m-1 より大きい場合は e を使用し、それ以外の場合は d を使用します。

n.mg

nは出力幅、つまり出力箇所の数です。m は上記と同じです。値の形式は上記と同じです。.m はデフォルトにすることができます。

%

%文字

      上記の形式プレースホルダーは、対応する記号を str%()、f''、および str.format() に追加します。たとえば、str%() のプレースホルダーは記号 % を追加し、f'' と str には記号を追加します。 format() フォーマット式は他のシンボルで使用されます。str%() はバイナリ %b への変換をサポートしていないため、サポートされていない形式文字 'b' を要求します。

(2)関数 str()、repr()、ascii()

       表 1-1 の形式プレースホルダ s は、関数 str() の結果を使用して人間が判読できるテキスト文字列を取得します。フォーマット プレースホルダー r は、関数 repr() の結果を使用してオブジェクトインタプリタが読み取るのにより適した形式に変換し、その戻り値も文字列型になります。関数は、式に引用符のペアの効果を追加します

       str()、repr() はそれぞれ __str__()、__repr__() メソッドを呼び出し、オブジェクト クラスにはこれら 2 つのメソッドが含まれ、すべての Python クラスがオブジェクト クラスを継承するため、すべての Python クラスは __str__()、__repr__() メソッドを継承します。関数 print は、印刷時にデフォルトで __str__() メソッドを呼び出すため、関数 print の印刷出力は実際には自動的に文字列形式に変換されます。

sr1 = 'Hello,Python\n'
#print打印默认调用了__str__()方法,显示出的文本字符串,适合人阅读,
#相当于执行了转义符\n。
print(sr1)
#repr(sr1)实际获得的值为"'Hello,Python\n'",
#但经过print打印调用了__str__()方法,显示为'Hello,Python\n'。
print(repr(sr1))
#上面相当于下面。
#格式占位符表示该位置会产生一个什么格式的数据。
#str%()中格式占位符都会增加符号%,下面%r表示该位置产生repr()函数返回的字符串格式的数据,
#实际也是依次引用右边小括号的实参进行格式化。
#下面print打印也调用了__str__()方法。
print('%r'%(sr1))

#数字的字符串格式。
sr2=str(123)
print(type(sr2),sr2)
#对于字符串,增加引号。
print(type(repr(sr2)),repr(sr2))
#对于非字符串的整型,增加引号。
print(type(repr(123)),repr(123))

print('%s'%(123))#s即为str()
print('%r'%(123))#r即为repr()

操作結果:

        関数 repr() は引用符のペアを追加することと同等であり、 eval() 関数を使用して repr() の結果を元のデータに復元できます。解析関数 eval の使用法については、このブログの第 9 章を参照してください。

sr1 = 'Hello,Python'
#根据eval的执行特点,下面是可行的,但不能直接用eval(sr1)。
#eval执行了"'Hello,Python'",得到结果'Hello,Python',sr1引用了它。
sr1=eval(repr(sr1))
#print打印默认调用了__str__()方法,显示出的文本字符串,适合人阅读。
print(sr1)

操作結果:

       

       クラス内の __str__() または __repr__() メソッドを書き換えることができ、クラスは、インスタンス化されるときに、書き換えられた __str__() または __repr__() メソッドを自動的に実行します。この自動実行は、__init__() と似ています。がオーバーライドされると、__str__() がデフォルトで実行されます。

class Group:
    def __init__(self,name,age):
        self.name = name
        self.age = age

#返回类对象地址,打印出类对象地址。
print(Group('Bor',23))


class Member:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def __repr__(self):
        return ('名字是:%s,年龄是:%d')%(self.name,self.age)

#重写了__repr__方法,类实例化时自动执行__repr__方法。
#打印自动执行__repr__方法的返回值。
print(Member('Bor',23))


class Student:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def __repr__(self):
        return ('名字是:%s,年龄是:%d')%(self.name,self.age)

    def __str__(self):
        return ('name is %s,age is %d')%(self.name,self.age)

#重写了__repr__、__str__方法,类实例化时默认自动执行__str__方法。
#打印自动执行__str__方法的返回值。
print(Student('Bor',23))

操作結果:

       表 1-1 の形式プレースホルダ a は、関数ascii()の結果を使用し、戻り値は ASCII エンコード標準に従ってデコードされた文字です。ASCII でエンコードできない場合は、 \x, \u (または \U)エスケープして引用符を追加します。これは repr() 関数と同様ですが、デコード時のエンコード標準が異なる点が異なります。

sr1='abc\n'
#对字符串增加引号,是ASCII解码的字符串。
print(type(ascii(sr1)),ascii(sr1))
print('%a'%(sr1))

sr2='你好'
#对汉字字符串增加引号,不能用ASCII解码,则会用\x、\u进行转义。
print(type(ascii(sr2)),ascii(sr2))
print('%a'%(sr2))

n1=129
#对整型增加引号,是ASCII解码的数字字符串。
print(type(ascii(n1)),ascii(n1))
print('%a'%(n1))

print('\n')
print(type(repr(sr2)),repr(sr2))
print(type(sr2),sr2)

print(type(repr(n1)),repr(n1))
print(type(str(n1)),str(n1))
print('%s'%(n1))

操作結果:

       ascii() の結果は、ASCII エンコード標準を使用してデコードまたはエスケープされ、引用符が追加されます。タイプおよび ASCII エンコーディング標準は、次の関連コンテンツに参加できます。

       次に、f''、str.format()、および str%() の文字列フォーマットの具体的な使用方法を説明します。f'' 文字列フォーマットは、f-string 文字列フォーマットと呼ばれることがよくあります。

2. f'' str.format() 、およびstr%()形式の式でのオブジェクトへの参照

        オブジェクトへの f''、str.format()、および str%() 参照の基本形式は次のとおりです。

        f'{name}'、この式はパラメーター オブジェクトへの参照をサポートしていません。name はオブジェクトへの参照である名前 (オブジェクトの ID) を表し、ここでの名前をデフォルトにすることはできません。

       '{name}'.format()、format() のかっこはパラメータであり、位置パラメータまたはキーワード パラメータにすることができます。つまり、str.format(*args, **kwargs) がサポートされ、name もサポートされます。ここで使用する実パラメータのオブジェクトの参照ですが、ここでの名前はformat()の位置実パラメータに対応する序数(0から始まる序数)、またはキーワードパラメータのキーワードです。はキーワード実パラメータです。名前はデフォルトにできません。引用符が 1 つの位置実パラメータのみの全体的な操作、または各位置実パラメータの順番の全体的な操作を示している場合、順序番号の名前はデフォルトにできます。は位置実パラメータに対して実行され、序数を意味します。名前をデフォルトにすることはできません。

       '%(name)'% ()、この式はキーワード パラメータの参照には適していません。右括弧 () はパラメータです。パラメータが辞書の場合は、name を使用して辞書内のオブジェクトを参照できます。それ以外の場合は、name を使用して辞書内のオブジェクトを参照できます。 、名前はデフォルトです。また、右側のかっこ () 内のパラメータが 1 つだけの場合、かっこはデフォルトにすることができます。

       f'' の名前参照はパラメータとは関係ありませんが、str.format() と str%() の名前参照はパラメータに関連しており、str.format() と str%() はパラメータを参照します。ディクショナリ内のオブジェクトは非常に特殊であり、キーワード パラメータの参照に違いがあります。str.format() と str%() はディクショナリ内のオブジェクトを参照します。参照名として使用できるのは特定のデータ型のみです。この名前は識別子の形式 ( スタイル ) ですが、名前は必ずしも識別子の形成に関する標準 (standard) に準拠しているわけではありません。詳細については、次の例を参照してください。次の例は、さまざまな形式によるオブジェクトへの参照です。表現。

sr1,sr2='ab','cd'
te1 = {'kr': 'ij', 10: 31, '12': 89,'15y':76}
lt1=[1,2,3]

print("f'':")
#f''是通过名称引用对象,对字典的键值的引用是通过键名引用,这也是字典的引用方式。
print(f'{sr1},{sr2},{te1},{te1["kr"]},{te1[10]},{te1["12"]},{te1["15y"]}')

print('\nstr.format():')
#对于位置实参,str.format()若是按顺序引用小括号()中的位置实参,{}中可缺省序数。
#不能出现有的有序数,有的缺省序数这种形式。对于关键字实参,关键字不能缺省。
print('{},{z},{},{}'.format(sr1,sr2,te1,z=3))
#但引用对象的局部的元素时,应该使用序数。
print('{0},{1[0]},{2}'.format(sr1,sr2,te1))
#序数代表了对应的位置实参。
print('{1},{2},{0}'.format(sr1,sr2,te1))

#下面是借助键名对位置参数字典中的对象(键值)进行引用,
#但不支持键名为数字字符串的,其它都支持,并且引用方式类似标识符引用,
#而不是直接使用键名(字典的引用方式)。
#下面键名10、'15y'类似标识符进行引用,但不支持数字字符串键名'12',
#注意,对参数te1里面再次进行引用,这时不再是参数引用。
print('{0[kr]},{0[10]},{0[15y]}'.format(te1))

#下面是关键字参数进行引用,因为函数的关键字参数对应为变量,关键字参数实际也是变量,
#而变量名(变量名也是标识符)的首个符号不能是数字,因此,下面只能使用关键字kr。
#下面是对实参**te1进行解包,对关键字参数进行引用,具体可以参加前面讲到的动态参数。
print('{kr}'.format(**te1))

#下面是对位置实参的引用。
print('{2},{0},{1}'.format(*lt1))

#str.format()可以通过关键字引用关键字实参,也可以引用其局部元素。
print('{y},{y[1]}'.format(y=[7,8,9]))

print('\nstr%():')
#str%()不适合引用关键字参数。
#格式占位符表示该位置会产生一个什么格式的数据。
#str%()中格式占位符都会增加符号%,下面%s表示该位置产生字符串格式的数据,
#实际也是依次引用右边小括号的实参进行格式化。
print('%s,%s'%(sr1,sr2))
#借助键名对位置参数字典中的对象进行引用,
#但不支持数字的键名,其它都支持,并且引用方式类似标识符引用,
#而不是直接使用键名(字典的引用方式)。
#下面键名'kr'、'12'、'15y'类似标识符进行引用,但不支持数字键名10。
print('%(kr)s,%(12)s,%(15y)s'%(te1))

print('\n通过路径引用对象:')
class AA:
    a1=1
    a2=2

print(f'{AA.a1},{AA.a2}')
print(f'{AA().a1},{AA().a2}')
#下面只能变成关键字参数才能引用。
print('{t.a1},{t.a2}'.format(t=AA))
print('{t.a1},{t.a2}'.format(t=AA()))

操作結果:

      f''、str.format()、および str%() の使用はある程度補完的であり、それぞれに独自の特性があります。さらに、f'' と str.format() はプレースホルダーを使用する必要がありません。上記のコードでは、f'' と str.format() はプレースホルダーを使用しませんが、str%() はプレースホルダーを必要とします。f'' の名前は存在する必要があり、デフォルトにすることはできません。

      Python では、オブジェクトへの参照は通常、3 つの基本形式で行われます。1 つはシリアル番号で参照する方法です。たとえば、sr1[2]、2 がインデックスです。もう 1 つは、参照するキー名を使用する方法です。これは、キー名の性質の参照です。たとえば、dictionary dt1['bd']、'bd' はキー名です。もう 1 つは、識別子を使用して参照する方法です。たとえば、変数 num=856、num は変数です。上記の例から、str.format() と str%() の名前参照には特定の特殊性があり、近似識別子への参照はありますが、識別子の仕様には準拠していません。

3 つ、f'' str.format() 、およびstr%()の形式式で記述される文字を増やします。

sr1='abc'
k1=len(sr1)

#f''
print(f'字符串{sr1}的长度是{k1}')
#或用str.format()
print('字符串{0}的长度是{1}'.format(sr1,k1))
#或用str%()
print('字符串%s的长度是%d'%(sr1,k1))

操作結果:

       f''、str.format()、および str%() の 3 つの書式設定式が上にリストされています。上記の印刷出力は、特定の形式での印刷出力です。この種の形式の出力により、印刷結果が読みやすくなります。print(sr1,k1) を使用すると、明らかに読みにくくなります。結果を単に見るのは直感的ではありませんが、上記の説明的な形式の印刷では、印刷結果が一目でわかります。

Python の f''、str.format()、および str%() の文字列フォーマットの詳細な説明 (2):

https://blog.csdn.net/thefg/article/details/130941724

最後に、「いいね」、ブックマーク、フォローをよろしくお願いします。

おすすめ

転載: blog.csdn.net/thefg/article/details/130940550