False
相当于0
并且True
是等价的,1
因此可以做这样的事情:
def bool_to_str(value):
"""value should be a bool"""
return ['No', 'Yes'][value]
bool_to_str(True)
Run Code Online (Sandbox Code Playgroud)
请注意值是如何bool
但是用作int
.
这是使用Pythonic还是应该避免?
Ale*_*lli 163
我将是一个奇怪的声音(因为所有的答案都在谴责使用事实,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(...)
)形式-为每一个不同的字串其他操作,只需随意使用,而不必扭曲.这适用于索引,算术,位操作等等.
Gui*_*sum 145
我和Alex在一起.False==0
而且True==1
,这并没有错.
不过,在Python 2.5及更高版本中,我会使用Python的条件表达式来编写这个特定问题的答案:
def bool_to_str(value):
return 'Yes' if value else 'No'
Run Code Online (Sandbox Code Playgroud)
这样就没有要求参数实际上是一个bool - 就像if x: ...
接受任何类型一样x
,bool_to_str()
函数应该在传递None,字符串,列表或3.14时做正确的事情.
Sil*_*ost 37
一定:
def bool_to_str(value):
"value should be a bool"
return 'Yes' if value else 'No'
Run Code Online (Sandbox Code Playgroud)
更具可读性.
min*_*hee 13
在某些情况下,您的代码似乎不准确:
>>> def bool_to_str(value):
... """value should be a bool"""
... return ['No', 'Yes'][value]
...
>>> bool_to_str(-2)
'No'
Run Code Online (Sandbox Code Playgroud)
我建议你只使用条件运算符来提高可读性:
def bool_to_str(value):
"""value should be a bool"""
return "Yes" if value else "No"
Run Code Online (Sandbox Code Playgroud)
它实际上是False == 0和True == 1的语言特征(它不依赖于实现):Python中的False == 0和True == 1是一个实现细节,还是由语言保证的?
但是,我确实同意其他大多数答案:['No', 'Yes'][value]
通过使用… if value else …
或者使用字典来获得相同结果有更多可读方式,这些方法具有提示和陈述的相应优点,这value
是一个布尔值.
另外,… if value else …
遵循通常的惯例,即非0是真的:即使在value == -2
(值为True)时它也可以工作,如dahlia暗示的那样.在这种情况下,列表和字典方法不那么强大,所以我不推荐它们.
归档时间: |
|
查看次数: |
8049 次 |
最近记录: |