Python3 中使用 %x 格式化字符串是否合适?

3

有人告诉我要让字符串格式保持一致。我经常写这样的代码:

print(f'\nUpdate Frame: {update_frame}',
       '    x-pos: %spx' % round(self.x),
       '    y-pos: %spx' % round(self.y),
       '    x-vel: %spx/u' % round(self.vx),
       '    y-vel: %spx/u' % round(self.vy),
       sep='\n')

因为我认为对于一些事情(比如追加单位),使用%x更容易,但对于其他事情,使用f-strings更容易。这是不好的做法吗?


只要%s仍然得到支持并且没有被弃用,从Python的角度来看,它不会被视为“不好的”。但是,如果编写的代码用于另一个明确禁止此类风格的项目,则会被视为“不好的”。请注意,这可能具有很大的主观性。 - metatoaster
1
由谁说的?为什么你认为你应该是不一致的?而且为什么要四舍五入,而不是实际使用强格式化呢? - jonrsharpe
Codereview和其他一些人已经对此发表了评论。我并不是在专业环境下编写代码,而且我可能是出于习惯喜欢使用“%s”。 - Alec
1
可以使用它,但是还有其他方法可以完成相同的事情,你可能会更喜欢或发现更方便、易于阅读等。 - martineau
我认为这个问题主要是基于观点的。你说的“不好”,是指速度不够快吗?代码可读性不够高?可写性不够好?还是“Pythonic”(我认为这也是基于观点的)?我认为其实没有一种真正的方式可以回答这个问题而不插入自己的观点。只要你不做一些被普遍认为是不好的事情(例如,在插入 sqlite 数据库时使用 %s),就会有人争论双方,并且在他们自己的想法中,他们都是有主观正确性的。 - Nick Vitha
当我写下这句话时,似乎有其他人也同意并将其搁置了。 - Nick Vitha
1个回答

2

注意:这似乎是一个非常主观的问题。我会根据我在Python社区中所见到的内容提供答案。

使用%格式化字符串并不是一种坏的用法。 一些开发人员建议使用f-strings和str.format(),因为这样做可以提高可读性。一般来说,开发人员推荐使用f-strings。在较低版本的Python中,应该使用str.format()

f-strings:

    print(f'\n    Update Frame: {update_frame}',
          f'    x-pos: {round(self.x)}px' ,
          f'    y-pos: {round(self.y)}px',
          f'    x-vel: {round(self.vx)}px/u',
          f'    y-vel: {round(self.vy)}px/u',
          sep='\n')

str.format():

print('\n    Update Frame: {}'.format(update_frame),
      '    x-pos: {}px'.format(round(self.x)) ,
      '    y-pos: {}px'.format(round(self.y)),
      '    x-vel: {}px/u'.format(round(self.vx)),
      '    y-vel: {}px/u'.format(round(self.vy)),
      sep='\n')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接