小编P20*_*000的帖子

为什么 print("...")(即连续三个点)打印出空白?

我想连续打印三个点(以形成省略号),但 print() 打印空白。

\n
print("one moment...")\none moment...\nprint("...")\n\nprint("..")\n..\nprint("...abc...")\nabc...\nprint("\\u2026")\n\xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n

这里发生了什么事?为什么“...”以特殊方式解析?

\n

我在 PyCharm 中使用 ipython。

\n

python pycharm python-3.x

63
推荐指数
1
解决办法
5924
查看次数

为什么与“is”的布尔比较如此糟糕?

风格指南如下:

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

python boolean boolean-expression

4
推荐指数
1
解决办法
578
查看次数