字符串9:format()格式化语法基础

目录

1. 标准格式化语法

2. 基础用法:单个或多个{}

3. 基础用法:索引

4. 基础用法:参数

5. 添加{}字符串

6. f字符串


1. 标准格式化语法

如下字符串的标准格式化规范语法,可直接在字符串的 format() 方法上使用,也可以用于 Python3.6 新添加的 f-字符串。

format_spec     ::=  [[fill]align][sign][#][0][width][grouping_option][.precision][type]
fill            ::=  
align           ::=  "<" | ">" | "=" | "^"
sign            ::=  "+" | "-" | " "
width           ::=  digit+
grouping_option ::=  "_" | ","
precision       ::=  digit+
type            ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

2. 基础用法:单个或多个{}

format()方法最简单的应用,即将()内表达式、字符串、整数、浮点数、列表、元组,添加到前方字符串中的{}中;

填充多个{}时,默认依次从()内取出相应数据,依次填充至对应位置{};

()内元素多于{}数量时,从左至右依次选取,正常填充,剩余的()内元素不使用;

{}数量多于()元素时,报错。

#format基础运用,将()内内容,填充到前方{}中
"abcd{}efg".format('123')
'abcd123efg'

#format支持表达式、字符串、整数、浮点数、列表、元组,直接填充到前方字符串中
x = 'abcd'
'中文一{}二三'.format(x[2:])
'中文一cd二三'
'中文一{}二三'.format(x.find('c'))
'中文一2二三'
'中文一{}二三'.format(3.0)
'中文一3.0二三'

#format支持从()中多组数据,依次对多个{}填充
'中文{}一{}二{}三'.format(3.0,[1,2],'ab')
'中文3.0一[1, 2]二ab三'
'中文{}一{}二{}三'.format(-5,[1,2],('a',0))
"中文-5一[1, 2]二('a', 0)三"

#()内元素多于{}数量时,从左至右依次选取,正常填充,剩余的()内元素不使用;
'中文{}一{}二三'.format(3.0,[1,2],'ab')
'中文3.0一[1, 2]二三'

#{}数量多于()元素时,报错。
'中文{}一{}二{}三'.format(3.0,[1,2])
Traceback (most recent call last):
  File "", line 1, in 
IndexError: Replacement index 2 out of range for positional args tuple

3. 基础用法:索引

format()方法,可以在{}内输入对应的()内元素索引值,直接调用该元素,每个元素都可以被多次调用;

{}内索引值大于()内现有元素数量报错;

{}内直接输入表达式、列表、元组、负数、字符串,报错。

#{}内输入索引值方法调用对应()内元素,每个元素都可以被多次调用
'{1}中文a{2}bc123{0}'.format('X','Y','Z')
'Y中文aZbc123X'
'{0}中文a{0}bc123{0}'.format('X')
'X中文aXbc123X'

#{}内索引值大于()内现有元素数量报错
'中{4}文'.format('X','Y','Z')
Traceback (most recent call last):
  File "", line 1, in 
IndexError: Replacement index 4 out of range for positional args tuple

#{}内直接输入表达式、列表、元组、负数、字符串,报错
'中{-1}文'.format('X','Y','Z')
Traceback (most recent call last):
  File "", line 1, in 
KeyError: '-1'

'中{[0,1]}文'.format('X','Y','Z')
Traceback (most recent call last):
  File "", line 1, in 
TypeError: string indices must be integers

'中{(0,1)}文'.format('X','Y','Z')
Traceback (most recent call last):
  File "", line 1, in 
KeyError: '(0,1)'

'中{1+1}文'.format('X','Y','Z')
Traceback (most recent call last):
  File "", line 1, in 
KeyError: '1+1'

'中{'a'}文'.format('X','Y','Z')
  File "", line 1
    '中{'a'}文'.format('X','Y','Z')
        ^
SyntaxError: invalid syntax

4. 基础用法:参数

format()方法,可以在()对参数赋值,{}内输入对应的参数即可调用该参数所赋数值填充,每个元素都可以被多次调用;

可以混合使用索引和参数两种方法,参数不参与索引排序,无法被索引值调用;

()内必须索引值调用的元素在前,参数名赋值在后,顺序颠倒或交叉都报错。

#{}内输入参数名,调用参数对应()内复制,每个参数都可以被多次调用
'{c}中文a{a}bc123{b}'.format(a='X',b='Y',c='Z')
'Z中文aXbc123Y'
'{a}中文a{a}bc123{a}'.format(a='X')
'X中文aXbc123X'
'{c}中文a{a}bc123{b}'.format(a=1,b=[2,'0'],c=(3j,['567']))
"(3j, ['567'])中文a1bc123[2, '0']"

#调用不存在参数名,报错
'{d}中文'.format(a='X',b='Y',c='Z')
Traceback (most recent call last):
  File "", line 1, in 
KeyError: 'd'

#参数不参与索引排序,无法被索引值调用
'{'X'}中文'.format(a='X',b='Y',c='Z')
  File "", line 1
    '{'X'}中文'.format(a='X',b='Y',c='Z')
       ^
SyntaxError: invalid syntax

#混合调用索引和参数名
'{c}中文a{1}bc1{b}23{0}'.format('一','二','三',a='X',b='Y',c='Z')
'Z中文a二bc1Y23一'

'中{4}文'.format('一','二','三',a='X',b='Y',c='Z')
Traceback (most recent call last):
  File "", line 1, in 
IndexError: Replacement index 4 out of range for positional args tuple

#()内必须索引值调用的元素在前,参数名赋值在后,顺序颠倒或交叉都报错
'中{0}文'.format(a='X',b='Y',c='Z','一','二','三')
  File "", line 1
    '中{0}文'.format(a='X',b='Y',c='Z','一','二','三')
                                                ^
SyntaxError: positional argument follows keyword argument

'中{0}文'.format('一',a='X','二',b='Y',c='Z')
  File "", line 1
    '中{0}文'.format('一',a='X','二',b='Y',c='Z')
                                            ^
SyntaxError: positional argument follows keyword argument

5. 添加{}字符串

如果format方法前字符串中,需要有{}字符,则可以通过{{}}添加;

{{}}不参与字符串格式化操作。

#通过{{}}在format方法前字符串中添加{}
'中文{{}}'.format()
'中文{}'

#{{}}不参与字符串格式化操作
'中文{{}}'.format(0)
'中文{}'
'中{}文{{}}'.format(1)
'中1文{}'
'中{{}}wen{}'.format(1)
'中{}wen1'

6. f字符串

f-string 可以直接看作是 format() 方法的语法糖,它进一步简化了格式化字符串的操作并带来了性能上的提升。

基础使用方法即:

f"xxxxx{字符串:format选项}xxxxx"  

f也可以大写为F。

实操示例:

#align、width、fill
F'中{-0.03:$=10}文'
'中-$$$$$0.03文'
f'中{666:1>10}文'
'中1111111666文'
f'中{"xyz":&<10}文'
'中xyz&&&&&&&文'
f'中{3j:^10}文'
'中    3j    文'

#sign
f'中{123:+}文'
'中+123文'
F'中{2.0: }文'
'中 2.0文'

#grouping_option
f'中{1234567:,}文'
'中1,234,567文'
F'中{12345.67:_}文'
'中12_345.67文'

#type
f"A{10:b}Z"
'A1010Z'
f"A{0:c}Z"
'A\x00Z'
f"A{0x100:d}Z"
'A256Z'
f'A{0.000123456789:e}Z'
'A1.234568e-04Z'
F'A{-12345.6789+98.7654321j:f}Z'
'A-12345.678900+98.765432jZ'

#多重复用
f"{1.23456:&>12.3g}"
'&&&&&&&&1.23'

你可能感兴趣的:(Python学习,#,字符串,python,开发语言)