在Python 3中的string格式
"(%d goals, $%d)" % (self.goals, self.penalties) ^我知道如何在Python 2中做到这一点
这是什么Python 3版本?
我尝试在线search示例,但我一直在获取Python 2版本
这里是关于“新”格式语法的文档 。 一个例子是:
 "({:d} goals, ${:d})".format(self.goals, self.penalties) 
 如果goals和penalties都是整数(即它们的默认格式是好的),则可以将其缩短为: 
 "({} goals, ${})".format(self.goals, self.penalties) 
 而且由于参数是self领域,所以也可以用一个参数来做两次(就像@Burhan Khalid在评论中指出的那样): 
 "({0.goals} goals, ${0.penalties})".format(self) 
解释:
-   {}意味着只有下一个位置参数,默认格式;
-   {0}表示索引为0的参数,默认格式;
-   {:d}是下一个位置参数,具有十进制整数格式;
-   {0:d}是索引为0的参数,具有十进制整数格式。
select参数(使用命名参数而不是位置参数,访问字段等)以及许多格式选项(填充数字,使用数千个分隔符,显示符号或不显示等)时,还有很多其他的事情可以做。 其他一些例子:
 "({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' 
注意:正如其他人指出的那样,新的格式不会取代前者,在Python 3和Python 2的新版本中都可以使用这两种格式。 有些人可能会说这是一个偏好的问题,但恕我直言,新的比老年人更具performance力,应该在编写新代码时使用(除非它的目标是旧环境)。
Python 3.6现在支持PEP 498的速记string插值。 对于你的用例,新的语法很简单:
 f"({self.goals} goals, ${self.penalties})" 
 这与之前的.format标准类似,但可以轻松执行下列操作: 
 >>> width = 10 >>> precision = 4 >>> value = decimal.Decimal('12.34567') >>> f'result: {value:{width}.{precision}}' 'result: 12.35' 
该行在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)' 
它不被弃用; 你的代码工作正常。 在这里阅读更多。