小编典典

将布尔值用作整数是Pythonic吗?

python

False等效于0True等效,1因此可以执行以下操作:

def bool_to_str(value):
    """value should be a bool"""
    return ['No', 'Yes'][value]

bool_to_str(True)

请注意value是如何bool使用的,但用作int

这是Pythonic的这种用法还是应该避免?


阅读 208

收藏
2020-12-20

共1个答案

小编典典

我会很奇怪(因为所有答案都拒绝使用False == 0andTrue == 1保证语言的使用),因为我声称使用该事实来简化代码是完全可以的。

从历史上看,逻辑上的正确/错误运算往往简单地0用于false和1true。在Python
2.2的整个生命周期中,Guido注意到太多的模块以诸如这样的赋值开头,false = 0; true = 1这会产生样板和无用的变化(后者是因为对正误的大写处处存在-有些使用了全部-
caps,一些全小写,一些帽初始)等介绍了bool的子类int和其TrueFalse常数。

由于当时我们中的许多人担心Python新手会使用新类型和常量来 限制
该语言的功能,因此出现了很多回退,但是Guido坚持认为我们只是悲观:没有人会如此糟糕地理解Python,例如,为了避免完全自然地使用FalseTrue作为列表索引,或者避免总和,或者避免其他如此清晰而有用的习惯用法。

该线程的答案证明我们是正确的:正如我们所担心的那样,人们对这种类型和常量的作用 已经 产生了完全的误解,人们 正在
回避,更糟糕的是,敦促其他人避免使用完全自然的Python构造,而赞成没用的回转。

为了应对这种误解,我敦促每个人都将 Python用作Python而不是 试图将其引入功能和偏好样式完全不同的其他语言中。
在Python中 ,True和False像1和0一样为99.9%, 唯一
不同的是它们的形式str(...)(因此repr(...))不同-对于除字符串化之外的 所有
其他操作,可以随意使用它们而不会扭曲。用于索引,算术,位运算等,等等,等等。

2020-12-20