小甲鱼 发表于 2021-1-22 21:42:40

已有 25 人购买  本主题需向作者支付 5 鱼币 才能浏览 购买主题

小古比鱼 发表于 2021-3-4 18:12:07

这节主要讲解了如何格式化字符串,即应用format()方法,指定位置参数或关键字参数,还有各式各样的格式化选项,如对齐、宽度、填充等,用于满足用户定制的不同输出需求,只是那个“标准格式化规范语法”看上去太复杂了……

zdasd 发表于 2021-5-19 10:57:21

**字符串5**

格式化字符串

format(*args, **kwargs):返回一个格式化的新字符串;使用位置参数(args)和关键字参数(kwargs)进行替换

>>> year = 2010
>>> "鱼C工作室成立于 year 年"
'鱼C工作室成立于 year 年'
>>> "鱼C工作室成立于 {} 年".format(year)
'鱼C工作室成立于 2010 年'

格式化字符串的套路就是使用一对花括号来表示替换字段

>>> "1+2={},2的平方是{},3的立方是{}".format(1+2, 2*2, 3*3*3)
'1+2=3,2的平方是4,3的立方是27'

在花括号里面,我们还可以写上数字,表示参数的位置

>>> "{}看到{}就很激动!".format("小甲鱼", "漂亮的小姐姐")
'小甲鱼看到漂亮的小姐姐就很激动!'
>>> "{1}看到{0}就很激动!".format("小甲鱼", "漂亮的小姐姐")
'漂亮的小姐姐看到小甲鱼就很激动!'
[参数中的字符串将会被当做元组的元素来对待]

同一个索引值是可以被引用多次的

>>> "{0}{0}{1}{1}".format("是", "非")
'是是非非'

我们还可以通过关键字进行索引

>>> "我叫{name},我爱{fav}。".format(name="小甲鱼", fav="Python")
'我叫小甲鱼,我爱Python。'
[用关键字参数时就不用管顺序了]

位置索引和关键字索引也可以组合在一起使用

>>> "我叫{name},我爱{0}。喜爱{0}的人,运气都不会太差。".format("Pyhon", name="小甲鱼")
'我叫小甲鱼,我爱Pyhon。喜爱Pyhon的人,运气都不会太差。'

单纯输出一对纯洁的花括号,有两种方法:
1.在参数里边直接写上花括号

>>> "{}, {}, {}".format(1, "{}", 2)
'1, {}, 2'

2.使用花括号来注释花括号

>>> "{}, {{}}, {}".format(1, 2)
'1, {}, 2'

**格式化语法**

format_spec     ::=  [align][#][.precision]

【align】指定的是对齐的方式:
'<':强制字符串在可用空间内左对齐(默认)
'>':强制字符串在可用空间内右对齐
'=':强制将填充放置在符号(如果有)之后但在数字之前的位置(这适用于以 “+000000120” 的形式打印字符串)
'^':强制字符串在可用空间内居中

>>> "{:^}".format(250)
'250'

要实现对齐,需要更大的空间,用【width】选项可以来指定更大的宽度
       
>>> "{:^10}".format(250)
'   250    '
>>> "{1:>10}{0:<10}".format(520, 250)
'       250520       '
>>> "{left:>10}{right:<10}".format(right=520, left=250)
'       250520       '
[使用关键字参数也没有问题]

如果在指定宽度的前面添加一个 '0',则表示为数字类型(其它类型无效)启用感知正负号的 '0' 填充效果。

>>> "{:010}".format(520)
'0000000520'
>>> "{:010}".format(-520)
'-000000520'
>>> "{:010}".format("FishC")
报错
[这一招只对数字有效]
       
我们还可以在对其选项的前面通过填充选项来指定填充的字符

>>> "{1:%>10}{0:%<10}".format(520, 250)
'%%%%%%%250520%%%%%%%'
>>> "{:0=10}".format(520)
'0000000520'
>>> "{:0=10}".format(-520)
'-000000520'
[前面填充0的例子也可以这么写]

痴我一拳 发表于 2021-5-21 11:39:52

复习
**字符串5**

格式化字符串

format(*args, **kwargs):返回一个格式化的新字符串;使用位置参数(args)和关键字参数(kwargs)进行替换

>>> year = 2010
>>> "鱼C工作室成立于 year 年"
'鱼C工作室成立于 year 年'
>>> "鱼C工作室成立于 {} 年".format(year)
'鱼C工作室成立于 2010 年'

格式化字符串的套路就是使用一对花括号来表示替换字段

>>> "1+2={},2的平方是{},3的立方是{}".format(1+2, 2*2, 3*3*3)
'1+2=3,2的平方是4,3的立方是27'

在花括号里面,我们还可以写上数字,表示参数的位置

>>> "{}看到{}就很激动!".format("小甲鱼", "漂亮的小姐姐")
'小甲鱼看到漂亮的小姐姐就很激动!'
>>> "{1}看到{0}就很激动!".format("小甲鱼", "漂亮的小姐姐")
'漂亮的小姐姐看到小甲鱼就很激动!'
[参数中的字符串将会被当做元组的元素来对待]

同一个索引值是可以被引用多次的

>>> "{0}{0}{1}{1}".format("是", "非")
'是是非非'

我们还可以通过关键字进行索引

>>> "我叫{name},我爱{fav}。".format(name="小甲鱼", fav="Python")
'我叫小甲鱼,我爱Python。'
[用关键字参数时就不用管顺序了]

位置索引和关键字索引也可以组合在一起使用

>>> "我叫{name},我爱{0}。喜爱{0}的人,运气都不会太差。".format("Pyhon", name="小甲鱼")
'我叫小甲鱼,我爱Pyhon。喜爱Pyhon的人,运气都不会太差。'

单纯输出一对纯洁的花括号,有两种方法:
1.在参数里边直接写上花括号

>>> "{}, {}, {}".format(1, "{}", 2)
'1, {}, 2'

2.使用花括号来注释花括号

>>> "{}, {{}}, {}".format(1, 2)
'1, {}, 2'

**格式化语法**

format_spec     ::=  [align][#][.precision]

【align】指定的是对齐的方式:
'<':强制字符串在可用空间内左对齐(默认)
'>':强制字符串在可用空间内右对齐
'=':强制将填充放置在符号(如果有)之后但在数字之前的位置(这适用于以 “+000000120” 的形式打印字符串)
'^':强制字符串在可用空间内居中

>>> "{:^}".format(250)
'250'

要实现对齐,需要更大的空间,用【width】选项可以来指定更大的宽度
      
>>> "{:^10}".format(250)
'   250    '
>>> "{1:>10}{0:<10}".format(520, 250)
'       250520       '
>>> "{left:>10}{right:<10}".format(right=520, left=250)
'       250520       '
[使用关键字参数也没有问题]

如果在指定宽度的前面添加一个 '0',则表示为数字类型(其它类型无效)启用感知正负号的 '0' 填充效果。

>>> "{:010}".format(520)
'0000000520'
>>> "{:010}".format(-520)
'-000000520'
>>> "{:010}".format("FishC")
报错
[这一招只对数字有效]
      
我们还可以在对其选项的前面通过填充选项来指定填充的字符

>>> "{1:%>10}{0:%<10}".format(520, 250)
'%%%%%%%250520%%%%%%%'
>>> "{:0=10}".format(520)
'0000000520'
>>> "{:0=10}".format(-520)
'-000000520'
[前面填充0的例子也可以这么写]

痴我一拳 发表于 2021-5-21 11:41:39

"{1:0>10}{0:0<10}".format(520,250)
'00000002505200000000'
>>> "{1:0>10}{0:0<10}".format(520,-250)
'000000-2505200000000'
>>> "{1:0=10}{0:0<10}".format(520,-250)
'-0000002505200000000'
>>> "{1:0=5}{0:0<10}".format(520,-250)
'-02505200000000'
>>> "{1:0=5}{0:0<5}".format(520,-250)
'-025052000'

wangtuan 发表于 2021-11-28 15:25:28

>>> year = 2010
>>> "鱼C工作室成立于 year 年"
'鱼C工作室成立于 year 年'
>>> "鱼C工作室成立于 {} 年".format(year)
'鱼C工作室成立于 2010 年'
>>> "1 + 2 = {},2的平方是{},3的立方是".format(1+2,2*2,3**3)
SyntaxError: invalid character ',' (U+FF0C)
>>> "1 + 2 = {},2的平方是{},3的立方是".format(1+2,2*2,3**3)
'1 + 2 = 3,2的平方是4,3的立方是'
>>> "1 + 2 = {},2的平方是{},3的立方是".format(1+2,2*2,3 ** 3)
'1 + 2 = 3,2的平方是4,3的立方是'
>>> "1 + 2 = {},2的平方是{},3的立方是{}".format(1+2,2*2,3 ** 3)
'1 + 2 = 3,2的平方是4,3的立方是27'
>>> "{}看到{}就很激动".format("小甲鱼","漂亮的小姐姐")
'小甲鱼看到漂亮的小姐姐就很激动'
>>> "{1}看到{0}就很激动".format("小甲鱼","漂亮的小姐姐")
'漂亮的小姐姐看到小甲鱼就很激动'
>>> "{0}{0}{1}{1}".format("是","非")
'是是非非'
>>> "我叫{name},我爱{fav}".format(name = "小甲鱼",fav = "Python")
'我叫小甲鱼,我爱Python'
>>> "我叫{name},我爱{0},喜爱{0}的人,运气都不会太差".format(name = "小甲鱼",python)
SyntaxError: positional argument follows keyword argument
>>> "我叫{name},我爱{0},喜爱{0}的人,运气都不会太差".format(name = "小甲鱼",python)
SyntaxError: positional argument follows keyword argument
>>> "我叫{name},我爱{0},喜爱{0}的人,运气都不会太差".format(python,name = "小甲鱼")
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
    "我叫{name},我爱{0},喜爱{0}的人,运气都不会太差".format(python,name = "小甲鱼")
NameError: name 'python' is not defined
>>> "我叫{name},我爱{0},喜爱{0}的人,运气都不会太差".format("python",name = "小甲鱼")
'我叫小甲鱼,我爱python,喜爱python的人,运气都不会太差'
>>> "我叫{name},我爱{0},喜爱{0}的人,运气都不会太差".format(name = "小甲鱼","python")
SyntaxError: positional argument follows keyword argument
>>> "{},{},{}".format(1,"{}",2)
'1,{},2'
>>> "{},{{}},{}".format(1,2)
'1,{},2'
>>> "{:^}".format(250)
'250'
>>> "{:^10}".format(250)
'   250    '
>>> "{1:>10}{0:<10}".format(520,250)
'       250520       '
>>> "{left:>10}{right:<10}".format(right = 520,left = 250)
'       250520       '
>>> "{:010}".format(520)
'0000000520'
>>> "{:010}".format(-520)
'-000000520'
>>> "{:010}".format("520")
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
    "{:010}".format("520")
ValueError: '=' alignment not allowed in string format specifier
>>> "{1:%>10}{0:%<10}"
'{1:%>10}{0:%<10}'
>>> "{1:%>10}{0:%<10}".format(520,250)
'%%%%%%%250520%%%%%%%'
>>> "{:0=10}".format(520)
'0000000520'
>>> "{:0=10}".format(-520)
'-000000520'
>>>

小程奋发图强 发表于 2021-12-9 16:56:39

苦等更新

ASM023 发表于 2022-2-25 20:42:37

打卡~~{:10_254:}{:10_254:}

wuzhenli_1 发表于 2022-4-20 13:19:04

默认左对齐还是右对齐

Er3nYeager 发表于 2022-4-26 11:21:15

标准格式化规范语法那里晕了

码农心 发表于 2022-5-9 17:31:25

已经快淹死了

ctx111 发表于 2022-8-6 11:46:42

{:10_269:}{:10_251:}
year=1999
'ctx出生于year年'
'ctx出生于year年'
'ctx出生于{}年'.format(year)
'ctx出生于1999年'
1
1
'1+4={},2pf{},5lf{}'.format{1+4,2*2,5*5*5}
SyntaxError: invalid syntax
'1+4={},2pf{},5lf{}'.format(1+4,2*2,5*5*5)
'1+4=5,2pf4,5lf125'
{1}看到{0}好开心'

SyntaxError: unexpected indent
'{1}看到{0}好开心'.format('ctx','njz')
'njz看到ctx好开心'
'{}{}{}{}{}'.format('整','齐')
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
    '{}{}{}{}{}'.format('整','齐')
IndexError: Replacement index 2 out of range for positional args tuple
'{0}{0}{1}{1}'.format('整','齐')
'整整齐齐'
'我是{c},我喜欢{z}'.format(z='njz',c='ctx')
'我是ctx,我喜欢njz'
'我是{n},我喜欢{0},喜欢{0}是个人的自由'.format('sw',name=ctx)
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
    '我是{n},我喜欢{0},喜欢{0}是个人的自由'.format('sw',name=ctx)
NameError: name 'ctx' is not defined
'我是{n},我喜欢{0},喜欢{0}是个人的自由'.format('sw',name='ctx')
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
    '我是{n},我喜欢{0},喜欢{0}是个人的自由'.format('sw',name='ctx')
KeyError: 'n'
'我是{n},我喜欢{0},喜欢{0}是个人的自由'.format('sw',n='ctx')
'我是ctx,我喜欢sw,喜欢sw是个人的自由'
'{},{},{}'.format(1,'{}',13213)
'1,{},13213'
'{},{{}},{}'.format(1,5)
'1,{},5'
{:^}.format(250)
SyntaxError: invalid syntax
{:^}.format(250)
SyntaxError: invalid syntax
'{:^}'.format(250)
'250'
'{:^}'.format(25)
'25'
'{:^}'.format(2)
'2'
'{:^}'.format(25000)
'25000'
'{1:>8}{2:<8}'.format(121,212)
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
    '{1:>8}{2:<8}'.format(121,212)
IndexError: Replacement index 2 out of range for positional args tuple
'{1:>8}{2:<8}'.format(261,250)
Traceback (most recent call last):
File "<pyshell#23>", line 1, in <module>
    '{1:>8}{2:<8}'.format(261,250)
IndexError: Replacement index 2 out of range for positional args tuple
'{1:>8}{2:<8}'.format(520,250)
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
    '{1:>8}{2:<8}'.format(520,250)
IndexError: Replacement index 2 out of range for positional args tuple
'{1:>10}{2:<10}'.format(520,250)
Traceback (most recent call last):
File "<pyshell#25>", line 1, in <module>
    '{1:>10}{2:<10}'.format(520,250)
IndexError: Replacement index 2 out of range for positional args tuple
'{:^10}'.format(250)
'   250    '
"{1:>10}{0:<10}".format(520, 250)
'       250520       '
'{1:>10}{2:<10}'.format(520,250)
Traceback (most recent call last):
File "<pyshell#28>", line 1, in <module>
    '{1:>10}{2:<10}'.format(520,250)
IndexError: Replacement index 2 out of range for positional args tuple
'{1:>10}{0:<10}'.format(520,250)
'       250520       '
'{1:>10}{0:<10}'.format(1,2)
'         21         '
'{1:>10}{0:<10}'.format(a,b)
Traceback (most recent call last):
File "<pyshell#31>", line 1, in <module>
    '{1:>10}{0:<10}'.format(a,b)
NameError: name 'a' is not defined
'{1:>10}{0:<10}'.format('a','b')
'         ba         '
'{l:>10}{r:<10}'.format('a','b')
Traceback (most recent call last):
File "<pyshell#33>", line 1, in <module>
    '{l:>10}{r:<10}'.format('a','b')
KeyError: 'l'
'{l:>10}{r:<10}'.format(r='a',l='b')
'         ba         '
'{l:>10}{r:<10}'.format(l=1,r=2)
'         12         '
'{1:>10}{0:<10}'.format(250,520)
'       250520       '
SyntaxError: multiple statements found while compiling a single statement
'{1:>10}{0:<10}'.format(250,520)
'       520250       '
'{1:>10}{0:<10}'.format(44,33)
'      3344      '
'{:05}'.format(5)

SyntaxError: unexpected indent
'{:010}'.format(5)
'0000000005'
'{:>010}'.format(5)
'0000000005'
'{:<010}'.format(5)
'5000000000'
'{:<08}'.format(5)
'50000000'
'{:<08}'.format(-5)
'-5000000'
'{:08}'.format(-5)
'-0000005'
'{1:!>10}{0:<!10}'.format(250,520)
Traceback (most recent call last):
File "<pyshell#46>", line 1, in <module>
    '{1:!>10}{0:<!10}'.format(250,520)
ValueError: Invalid format specifier
'{1:!>10}{0:<!10}'.format(420,240)
Traceback (most recent call last):
File "<pyshell#47>", line 1, in <module>
    '{1:!>10}{0:<!10}'.format(420,240)
ValueError: Invalid format specifier

JZt2902019046 发表于 2022-8-13 15:22:35

打卡

炎凉来寻 发表于 2022-9-1 21:32:08

打卡!!!

himary 发表于 2022-9-14 20:24:05

最新版本"{:010}".format("FishC")
'FishC00000'
是不报错的

chenjinchao 发表于 2022-9-23 17:58:13

卡打

lymbwx 发表于 2022-9-29 18:29:29

打卡

墨墨在努力吖 发表于 2022-10-4 14:59:18

>>> "我叫{name},我爱{1}。".format(name="墨墨","中国")
SyntaxError: positional argument follows keyword argument
>>> "我叫{name},我爱{0}。".format(name="墨墨","中国")
SyntaxError: positional argument follows keyword argument
>>> "我叫{name},我爱{0}。".format("中国",name="墨墨")
'我叫墨墨,我爱中国。'

求解答,为什么前面两个都报错咦!
位置索引和关键字结合使用,位置索引必须放在前面吗?

滴滴滴~打卡{:10_266:}

yes120 发表于 2022-10-28 18:12:23

学习

migu_sm1 发表于 2022-11-3 12:34:16

himary 发表于 2022-9-14 20:24
最新版本"{:010}".format("FishC")
'FishC00000'
是不报错的

试过了,确实不报错。但结果不同,字符串是右填充,数字是左填充。
页: [1] 2
查看完整版本: 第031讲:字符串(V)