3 回答
TA贡献1895条经验 获得超3个赞
我将是一个奇怪的声音(因为所有的答案都在谴责使用这个事实,False == 0
并且True == 1
,正如语言所保证的那样)因为我声称使用这个事实来简化你的代码是完全没问题的。
从历史上看,逻辑真/假操作倾向于简单地0
用于虚假和1
真实; 在Python 2.2的生命周期过程中,Guido注意到有太多的模块开始使用诸如此类的分配,false = 0; true = 1
并且这产生了样板和无用的变化(后者因为真假的大写到处都是 - 有些全部使用了-caps,一些全小写,一些cap-initial)因此引入了bool
子类int
及其True
和False
常量。
由于我们很多人担心Python新手会使用新类型和常量来限制语言的能力,所以当时有一些阻力,但Guido坚持认为我们只是悲观:没有人会理解Python这么糟糕,例如,为了避免完全自然地使用False
和True
作为列表索引,或总结,或其他这样完全清楚和有用的习语。
这个线程的答案证明我们是正确的:正如我们所担心的那样,对这种类型和常量的角色的完全误解已经出现,人们正在避免,更糟糕的是,敦促其他人避免,完全自然的Python构造支持无用的回转。
与这种误解的趋势作斗争,我敦促每个人都使用Python作为Python,而不是试图强迫它进入其功能和首选风格完全不同的其他语言的模式。 在Python,真假像1和0 99.9%,不同的仅仅在他们str(...)
(从而repr(...)
)形式-为每一个不同的字串其他操作,只需随意使用,而不必扭曲。这适用于索引,算术,位操作等等。
TA贡献1841条经验 获得超3个赞
我和Alex在一起。False==0
而且True==1
,这并没有错。
不过,在Python 2.5及更高版本中,我会使用Python的条件表达式来编写这个特定问题的答案:
def bool_to_str(value): return 'Yes' if value else 'No'
这样就没有要求参数实际上是一个bool - 就像if x: ...
接受任何类型一样x
,bool_to_str()
函数应该在传递None,字符串,列表或3.14时做正确的事情。
TA贡献1844条经验 获得超8个赞
一定:
def bool_to_str(value): "value should be a bool" return 'Yes' if value else 'No'
更具可读性。
添加回答
举报