为什么一个奇怪的固定间距的f字符串



休息了一下,决定调整我的2秒装饰器,因为预计会有早春(祈祷吧(。在添加雨伞20分钟后(你可能不得不用另一个UTF-8字符替换它们(,第一行让我抓狂,不管我在字符串上扔了什么"我希望它能这样工作"的东西。

最后,使用+运算符(第二行(解决了我的问题,尽管它不能用于第一次分离。所以,我问你:为什么间距会完全偏离(当两个串联运算符都相同时(,为什么这种非标准方法有效?

from functools import wraps
def dasher(f):
@wraps(f)
def wrapped(*args, **kwargs):
brella = 'U00002602'
print(f"{brella} #", f"{brella} # "*8, f"{brella}")
print(f"{brella} #", f"{brella} # "*8 + f"{brella}") # concat and crazy
# print("U00002602 #","U00002602 # "*8,"U00002602")
# print(f"U00002602 #",f"U00002602 # "*8,f"U00002602")
print()
return wrapped
@dasher
def dashed():
pass
dashed()
☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂ #  ☂
☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂

Python重构

由于Chris Doyle在评论中的回答,在解释了,+之间的间距差异后,以下内容以一些复杂性再次弄脏了东西,但扩展了可用性,说明了间距,同时避免了对sep=''的需要。

print(' # '.join(brella*3), '#' ,' xx '.join(brella*5) , '#' ,' # '.join(brella*3))
print(' # '.join(brella*3) + ' o ' +' xx '.join(brella*5) + ' o ' +' # '.join(brella*3))

带输出:

☂ # ☂ # ☂ # ☂ xx ☂ xx ☂ xx ☂ xx ☂ # ☂ # ☂ # ☂
☂ # ☂ # ☂ o ☂ xx ☂ xx ☂ xx ☂ xx ☂ o ☂ # ☂ # ☂ 

当您通过deafault传递多个项目进行打印时,打印将使用空格作为分隔符。因此,当你给出第一个字符串时,你会用#结束它。然后在后面加一个逗号,然后输入下一个要打印的项目(因此,由于打印项目的默认分隔符是空格,所以第一个项目和第二个项目将用空格分隔。因此,您将获得hashspaceumbrella

然而,您相乘的第二个字符串以空格结束。然后你给第三个项目加一个逗号。所以你的第二个项目以空格结束,然后打印会放在第二个和第三个项目之间的空格中。从而使您拥有双倍的空间。所以你会有hashspacespaceumbrella

如果您不希望出现这种行为,请手动将分隔符放在第一个项目末尾的空格中,使其与以空格结尾的第二个项目保持一致,然后在打印结束时将分隔符设置为空字符串。

或者,您可以将brella乘以10,然后使用"#"作为连接符将它们全部连接起来。

brella = 'U00002602'
print(f"{brella} #", f"{brella} # "*8, f"{brella}")
print(f"{brella} #", f"{brella} # "*8 + f"{brella}")
print(f"{brella} # ", f"{brella} # "*8, f"{brella}", sep='')
print(' # '.join(brella*10))

输出

☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂ #  ☂
☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂
☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂
☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂ # ☂

相关内容

  • 没有找到相关文章

最新更新