Python 3中的字符串格式

Jos*_*Baz 115 python string python-3.x

"(%d goals, $%d)" % (self.goals, self.penalties)
Run Code Online (Sandbox Code Playgroud)

^我知道如何在Python 2中执行此操作

什么是Python 3版本?

我尝试在线搜索示例,但我一直在使用Python 2版本

mgi*_*nbr 172

以下是有关"新"格式语法的文档.一个例子是:

"({:d} goals, ${:d})".format(self.goals, self.penalties)
Run Code Online (Sandbox Code Playgroud)

如果两个goalspenalties是整数(即其默认格式是确定的),它可以被简化为:

"({} goals, ${})".format(self.goals, self.penalties)
Run Code Online (Sandbox Code Playgroud)

由于参数是字段self,还有一种方法可以使用单个参数两次(如@Burhan Khalid在评论中指出的那样):

"({0.goals} goals, ${0.penalties})".format(self)
Run Code Online (Sandbox Code Playgroud)

解释:

  • {} 意味着只有下一个位置参数,默认格式;
  • {0}指带索引的参数0,默认格式;
  • {:d} 是下一个位置参数,带十进制整数格式;
  • {0:d}是带索引的参数0,带十进制整数格式.

在选择参数时可以做很多其他事情(使用命名参数而不是位置参数,访问字段等)和许多格式选项(填充数字,使用数千个分隔符,显示符号或不符号等).其他一些例子:

"({goals} goals, ${penalties})".format(goals=2, penalties=4)
"({goals} goals, ${penalties})".format(**self.__dict__)

"first goal: {0.goal_list[0]}".format(self)
"second goal: {.goal_list[1]}".format(self)

"conversion rate: {:.2f}".format(self.goals / self.shots) # '0.20'
"conversion rate: {:.2%}".format(self.goals / self.shots) # '20.45%'
"conversion rate: {:.0%}".format(self.goals / self.shots) # '20%'

"self: {!s}".format(self) # 'Player: Bob'
"self: {!r}".format(self) # '<__main__.Player instance at 0x00BF7260>'

"games: {:>3}".format(player1.games)  # 'games: 123'
"games: {:>3}".format(player2.games)  # 'games:   4'
"games: {:0>3}".format(player2.games) # 'games: 004'
Run Code Online (Sandbox Code Playgroud)

注意:正如其他人所指出的那样,新格式并不取代前者,Python 3和Python 2的新版本都可以使用.有些人可能会说这是一个偏好问题,但恕我直言,新版本的表现力要比旧版本更高,并且应该在编写新代码时使用(当然,除非它针对的是较旧的环境).

  • 你也可以做""({0.goals}目标,$ {0.penalties})".format(self)` (9认同)

JDo*_*ong 66

Python 3.6现在支持使用PEP 498进行简写文字字符串插值.对于您的用例,新语法很简单:

f"({self.goals} goals, ${self.penalties})"
Run Code Online (Sandbox Code Playgroud)

这与以前的.format标准,但让一个容易做的事情一样:

>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal('12.34567')
>>> f'result: {value:{width}.{precision}}'
'result:      12.35'
Run Code Online (Sandbox Code Playgroud)


Mar*_*eed 12

该行在Python 3中按原样运行.

>>> sys.version
'3.2 (r32:88445, Oct 20 2012, 14:09:29) \n[GCC 4.5.2]'
>>> "(%d goals, $%d)" % (self.goals, self.penalties)
'(1 goals, $2)'
Run Code Online (Sandbox Code Playgroud)

  • Python 3引入了一种新的语法 - 即花括号 - 但您不需要使用它.您可以使用旧版本或新版本.但他们是不同的; 如果您使用的是curlies,则不要使用百分号. (2认同)