为什么使用构造x =(条件和A或B)?

Dis*_*ami 9 python python-3.x

这个问题的答案之一是

print len(s)>5 and 'y' or 'n'
print(len(s)>5 and 'y' or 'n') #python3
Run Code Online (Sandbox Code Playgroud)

如果长度s > 5,则'y'打印否则'n'是.请解释这是如何工作的原因.谢谢.

我知道这不是推荐的方法,但我想了解它的工作原理.

Ned*_*der 15

这是一个老式的黑客.新的方式是:

print 'y' if len(s) > 5 else 'n'
Run Code Online (Sandbox Code Playgroud)

它起作用的原因是因为"A和B"将评估A,如果是,则评估为B.但如果A为假,则不需要评估B.同样,"C或D"将评估C,如果是假,将继续评估为D.

因此"A和B或C"与"(A和B)或C"相同.如果A为真,则它将评估B.如果A为假,则"(A和B)"为假,因此它将评估C.

正如Voo在注释中指出的那样,A的值不一定是True或者是False任何表达式,并且将被Python的规则解释为布尔值(0,无,空容器是假的,其他一切都是真的).

  • 大声笑 - 我的0分答案得到了一个自己的问题 - 我很晚才解释它!;-)但很好的eplanation ;-) (2认同)
  • 嗯,没有毫无意义的黑客的"完整性".怎么样''ny'[len(s)> 5]`?滥用语言的方式是无止境的. (2认同)
  • @Voo:实际上,如果A是真实值,"A和B"将评估为B,无论B的值如何.尝试"打印1和0" (2认同)