为了账号安全,请及时绑定邮箱和手机立即绑定

使用bool作为整体是Pythonic吗?

/ 猿问

使用bool作为整体是Pythonic吗?

PIPIONE 2019-08-08 17:07:19

使用bool作为整体是Pythonic吗?

False相当于0并且True是等价的,1因此可以做这样的事情:

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

请注意值是如何bool但是用作int

这是使用Pythonic还是应该避免?


查看完整描述

3 回答

?
蛊毒传说

我将是一个奇怪的声音(因为所有的答案都在谴责使用这个事实,False == 0并且True == 1,正如语言所保证的那样)因为我声称使用这个事实来简化你的代码是完全没问题的。

从历史上看,逻辑真/假操作倾向于简单地0用于虚假和1真实; 在Python 2.2的生命周期过程中,Guido注意到有太多的模块开始使用诸如此类的分配,false = 0; true = 1并且这产生了样板和无用的变化(后者因为真假的大写到处都是 - 有些全部使用了-caps,一些全小写,一些cap-initial)因此引入了bool子类int及其TrueFalse常量。

由于我们很多人担心Python新手会使用新类型和常量来限制语言的能力,所以当时有一些阻力,但Guido坚持认为我们只是悲观:没有人会理解Python这么糟糕,例如,为了避免完全自然地使用FalseTrue作为列表索引,或总结,或其他这样完全清楚和有用的习语。

这个线程的答案证明我们是正确的:正如我们所担心的那样,对这种类型和常量的角色的完全误解已经出现,人们正在避免,更糟糕的是,敦促其他人避免,完全自然的Python构造支持无用的回转。

与这种误解的趋势作斗争,我敦促每个人都使用Python作为Python而不是试图强迫它进入其功能和首选风格完全不同的其他语言的模式。 在Python,真假像1和0 99.9%,不同的仅仅在他们str(...)(从而repr(...))形式-为每一个不同的字串其他操作,只需随意使用,而不必扭曲。这适用于索引,算术,位操作等等。


查看完整回答
反对 回复 2019-08-08
?
偶然的你

我和Alex在一起。False==0而且True==1,这并没有错。

不过,在Python 2.5及更高版本中,我会使用Python的条件表达式来编写这个特定问题的答案:

def bool_to_str(value):
  return 'Yes' if value else 'No'

这样就没有要求参数实际上是一个bool - 就像if x: ...接受任何类型一样xbool_to_str()函数应该在传递None,字符串,列表或3.14时做正确的事情。


查看完整回答
反对 回复 2019-08-08
?
婷婷同学_

一定:

def bool_to_str(value):
    "value should be a bool"
    return 'Yes' if value else 'No'

更具可读性。


查看完整回答
反对 回复 2019-08-08
  • 3 回答
  • 0 关注
  • 230 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信