Python 3 中的字符串格式[重复]
- 2025-02-24 09:29:00
- admin 原创
- 67
问题描述:
我在 Python 2 中这样做:
"(%d goals, $%d)" % (self.goals, self.penalties)
这个 Python 3 的版本是什么?
我尝试在线搜索示例但得到的都是 Python 2 版本。
解决方案 1:
以下是有关“新”格式语法的文档。例如:
"({: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
,采用十进制整数格式。
选择参数时,您还可以做很多其他事情(使用命名参数而不是位置参数、访问字段等),还可以做很多格式选项(填充数字、使用千位分隔符、显示或不显示符号等)。其他一些示例:
"({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 中都可用。有些人可能会说这是一个偏好问题,但恕我直言,新格式比旧格式更具表现力,应该在编写新代码时使用(当然,除非它针对的是较旧的环境)。
解决方案 2:
Python 3.6 现在支持使用PEP 498进行简写文字字符串插值。对于您的用例,新语法很简单:
f"({self.goals} goals, ${self.penalties})"
这与以前的标准类似.format
,但可以轻松完成以下操作:
>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal('12.34567')
>>> f'result: {value:{width}.{precision}}'
'result: 12.35'
解决方案 3:
该行在 Python 3 中按原样工作。
>>> sys.version
'3.2 (r32:88445, Oct 20 2012, 14:09:29)
[GCC 4.5.2]'
>>> "(%d goals, $%d)" % (self.goals, self.penalties)
'(1 goals, $2)'
解决方案 4:
我喜欢这种方法
my_hash = {}
my_hash["goals"] = 3 #to show number
my_hash["penalties"] = "5" #to show string
print("I scored %(goals)d goals and took %(penalties)s penalties" % my_hash)
请注意分别附加在括号中的 d 和 s。
输出将是:
I scored 3 goals and took 5 penalties
解决方案 5:
从Python 3.6开始可以使用“f-strings”:
f'({self.goals} goals, ${self.penalties})'
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD