False等效于0和True等效,1因此可以执行以下操作:
False
0
True
1
def bool_to_str(value): """value should be a bool""" return ['No', 'Yes'][value] bool_to_str(True)
请注意value是如何bool使用的,但用作int。
bool
int
这是Pythonic的这种用法还是应该避免?
我会很奇怪(因为所有答案都拒绝使用False == 0andTrue == 1保证语言的使用),因为我声称使用该事实来简化代码是完全可以的。
False == 0
True == 1
从历史上看,逻辑上的正确/错误运算往往简单地0用于false和1true。在Python 2.2的整个生命周期中,Guido注意到太多的模块以诸如这样的赋值开头,false = 0; true = 1这会产生样板和无用的变化(后者是因为对正误的大写处处存在-有些使用了全部- caps,一些全小写,一些帽初始)等介绍了bool的子类int和其True和False常数。
false = 0; true = 1
由于当时我们中的许多人担心Python新手会使用新类型和常量来 限制 该语言的功能,因此出现了很多回退,但是Guido坚持认为我们只是悲观:没有人会如此糟糕地理解Python,例如,为了避免完全自然地使用False和True作为列表索引,或者避免总和,或者避免其他如此清晰而有用的习惯用法。
该线程的答案证明我们是正确的:正如我们所担心的那样,人们对这种类型和常量的作用 已经 产生了完全的误解,人们 正在 回避,更糟糕的是,敦促其他人避免使用完全自然的Python构造,而赞成没用的回转。
为了应对这种误解,我敦促每个人都将 Python用作Python , 而不是 试图将其引入功能和偏好样式完全不同的其他语言中。 在Python中 ,True和False像1和0一样为99.9%, 唯一 不同的是它们的形式str(...)(因此repr(...))不同-对于除字符串化之外的 所有 其他操作,可以随意使用它们而不会扭曲。用于索引,算术,位运算等,等等,等等。
str(...)
repr(...)