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。
这是Pythonic的这种用法还是应该避免?
Answers:
我会很奇怪(因为所有答案都拒绝使用False == 0andTrue == 1保证语言的使用),因为我声称使用该事实来简化您的代码是完全可以的。
从历史上看,逻辑上的正确/错误运算往往简单地0用于false和1true。在Python 2.2的整个生命周期中,Guido注意到太多的模块以诸如这样的赋值开头,false = 0; true = 1这会产生样板和无用的变化(后者是因为对正误的大写处处存在-有些使用了全部-caps,一些全小写,一些帽初始)等介绍了bool的子类int和其True和False常数。
由于当时我们中的许多人担心Python新手会使用新类型和常量来限制该语言的功能,因此出现了很多回退,但是Guido坚持认为我们只是悲观:没有人会如此糟糕地理解Python,例如,为了避免完全自然地使用False和True作为列表索引,或者避免总和,或者避免其他如此清晰而有用的习惯用法。
该线程的答案证明我们是正确的:正如我们所担心的那样,人们对这种类型和常量的作用已经产生了完全的误解,人们正在回避,更糟糕的是,敦促其他人避免使用完全自然的Python构造,而赞成没用的回转。
为了应对这种误解,我敦促每个人都将Python用作Python,而不是试图将其引入功能和偏好样式完全不同的其他语言中。  在Python中,True和False像1和0一样为99.9%,唯一不同的是它们的形式str(...)(因此repr(...))不同-对于除字符串化之外的所有其他操作,可以随意使用它们而不会产生扭曲。用于索引,算术,位运算等,等等,等等。
val?1:0如果您需要将布尔值当作int来使用,则它会强迫和类似的体操垃圾。
                    bool子类int
                    … if … else …方法相比)。
                    'True' if value else 'False'可以使用任何truish value。
                    我和亚历克斯在一起。False==0和True==1,这没有任何问题。
不过,在Python 2.5及更高版本中,我仍将使用Python的条件表达式编写此特定问题的答案:
def bool_to_str(value):
  return 'Yes' if value else 'No'
这样,就不需要参数实际上是布尔值-就像if x: ...接受任何类型的一样x,bool_to_str()函数在传递无,字符串,列表或3.14时应该做正确的事情。
一定:
def bool_to_str(value):
    "value should be a bool"
    return 'Yes' if value else 'No'
更具可读性。
x if foo else ythingy更具Python风格,但我仍然认为它看起来很难看,而且经常使代码膨胀。我认为问题中的代码看起来更清晰,对于不了解隐式布尔值向int转换的人来说,这可能会令人困惑,但x if foo else y对于来自foo ? x : y事物世界的人来说,也可能令人困惑。即使我不得不承认,对于正在学习母语的人们来说,这x if foo else y可能是最清晰的语言。
                    您的代码在某些情况下似乎不正确:
>>> def bool_to_str(value):
...     """value should be a bool"""
...     return ['No', 'Yes'][value]
...
>>> bool_to_str(-2)
'No'
我建议您仅使用条件运算符以提高可读性:
def bool_to_str(value):
    """value should be a bool"""
    return "Yes" if value else "No"
bool_to_str,带有doc comment value should be a bool,当您通过该函数时,它给出了错误的答案,您感到惊讶-2:)
                    … if … else …方法允许您产生不必要的限制代码。
                    bool通过提供... if ... else ...。然后,该功能适用于布尔值和其他任何功能。虽然也许不是最好的例子,但我不同意将布尔值用作整数的想法。
                    True或False)还是“真实的表达式”(例如a and b or c),则只需将bool函数应用于该值。简单!
                    这实际上是False == 0和True == 1(不依赖于实现)的语言特征:Python中False == 0和True == 1是实现细节还是由该语言保证?
但是,我确实同意其他大多数答案:['No', 'Yes'][value]通过使用… if value else …或字典,可以获得与相同的结果的更具可读性的方式,它们分别具有提示和声明value布尔值的优点。
另外,… if value else …遵循大写非0的通常约定:value == -2大丽花暗示,即使(value为True),它也可以使用。在这种情况下,list和dict方法不那么健壮,因此我不推荐它们。
我个人认为这取决于您如何使用此事实,这是两个示例
只需使用布尔值,因为条件语句就可以了。人们一直在这样做。
a = 0
if a:
    do something
但是,如果您要计算成功的项目数,则该代码对于其他人来说可能不太友好。
def succeed(val):
    if do_something(val):
        return True
    else:
        return False
count = 0
values = [some values to process]
for val in values:
    count += succeed(val)
但是我确实看到生产代码看起来像这样。
all_successful = all([succeed(val) for val in values])
at_least_one_successful = any([succeed(val) for val in values])
total_number_of_successful = sum([succeed(val) for val in values])