为什么对 f 弦上的间距进行奇怪的修复

why an odd fix for spacing on an f-string

休息一下,决定调整我的 2 秒装饰器,以期早日 Spring(祈祷)。添加雨伞后 20 分钟(您可能必须用另一个 UTF-8 字符替换它们),第一行让我抓狂,不管我在字符串中扔了什么 'I wish it worked this way' 东西。

最后,使用 + 运算符(第二行)解决了我的问题,即使它不能在第一次分离中使用。所以,我问你:为什么完全没有间距(当两个连接运算符相同时),以及为什么这种非标准方法有效?

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 ☂ # ☂ # ☂ 

当您传递多个项目进行打印时,默认打印将使用 space 作为分隔符。因此,当您给出第一个字符串时,您会以 # 结束它。然后你用逗号跟随它并传递你的下一个项目来打印(所以因为打印项目的默认分隔符是 space 第一个项目和第二个项目将由 space 分隔。所以你会有 hash space umbrella

然而,你乘以的第二个字符串以 space 结尾。然后你给一个逗号然后你的第三个项目。所以你的第二个项目以 space 结尾,然后 print 将在你的第二个和第三个项目之间放置一个 space 。导致你有一个双 space。所以你会有 hash space space umbrella

如果您不希望出现这种情况,请在第一项的末尾手动放入 space 以使其与第二项以 space 结尾的项目一致,然后在最后您的打印件将分隔符设置为空字符串。

或者,您可以将 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))

输出

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