我想连续打印三个点(以形成省略号),但 print() 打印空白。
\nprint("one moment...")\none moment...\nprint("...")\n\nprint("..")\n..\nprint("...abc...")\nabc...\nprint("\\u2026")\n\xe2\x80\xa6\nRun Code Online (Sandbox Code Playgroud)\n这里发生了什么事?为什么“...”以特殊方式解析?
\n我在 PyCharm 中使用 ipython。
\n风格指南如下:
# Correct:
if greeting:
# Wrong:
if greeting == True:
# Worse:
if greeting is True:
Run Code Online (Sandbox Code Playgroud)
请参阅PEP 8,搜索单词“更糟”
为什么是这样?我习惯于尽可能明确地检查条件,以使代码更具可读性并捕获异常。
考虑这个函数:
def f(do_it):
if do_it : print("doit")
else : print("no don't")
Run Code Online (Sandbox Code Playgroud)
很容易被滥用/监督,出现意想不到的行为
>>> f("False")
doit
>>> f([False])
doit
Run Code Online (Sandbox Code Playgroud)
例如,当您检查可能无意中传递 if 子句的返回值时,这是一个真正的问题。通过使用该构造可以避免这种情况is。
显然,PEP 建议有充分的理由,但它是什么?
在评论者的推动下,进一步的研究使我得出以下发现:
if x:
Run Code Online (Sandbox Code Playgroud)
调用 x 类的 __bool 方法。该方法应返回 True 或 False,具体取决于对象认为自己是两者中的哪一个。
if x==True:
Run Code Online (Sandbox Code Playgroud)
调用 x 类的 __eq 方法。该方法应该能够将自身与 True(或 False)进行比较,并根据具体情况返回 True 或 False。
if x is True
Run Code Online (Sandbox Code Playgroud)
两者都不调用。这测试 x 是否是“True”对象。它完全绕过了 __eq 和 __bool …