我刚才知道python中有 Truthy 和 Falsy 值,这些值与普通True
和False
不同?
有人可以请深入解释 truthy 和 falsy 值是什么?
我应该在哪里使用它们?
truthy 和True
值以及 falsy 和False
值有什么区别?
答案 0 :(得分:123)
所有价值观都被视为"真实的"除了以下内容,其中包括" falsy":
None
False
0
0.0
0j
Decimal(0)
Fraction(0, 1)
[]
- 空list
{}
- 空dict
()
- 空tuple
''
- 空str
b''
- 空bytes
set()
- 空set
range
,例如range(0)
obj.__bool__()
返回False
obj.__len__()
返回0
A" truthy" value将满足if
或while
语句执行的检查。我们使用" truthy"和" falsy"区别于bool
值True
和False
。
答案 1 :(得分:46)
正如所描述的评论,它只是指被评估为True或False的值。
例如,要查看列表是否为空,而不是像这样检查:
if len(my_list) != 0:
print "Not empty!"
你可以这样做:
if my_list:
print "Not empty!"
这是因为在评估布尔值时,某些值(例如空列表)被视为False。非空列表为True。
类似于整数0,空字符串“”,依此类推,对于False,非零整数,非空字符串等等,对于True。
“truthy”和“falsy”等术语的概念只是指那些在上述情况下被认为是真的值,以及那些被认为是假的值。
例如,空列表([]
)被视为“虚假”,非空列表(例如[1]
)被视为“真实”。
答案 2 :(得分:3)
Python通过对类型应用bool()
来确定真实性,该类型将返回True
或False
,该类型用于if
或while
之类的表达式中。
以下是自定义类Vector2d
的示例,当量值(向量的长度)为0时返回False
,否则返回True
。
import math
class Vector2d(object):
def __init__(self, x, y):
self.x = float(x)
self.y = float(y)
def __abs__(self):
return math.hypot(self.x, self.y)
def __bool__(self):
return bool(abs(self))
a = Vector2d(0,0)
print(bool(a)) #False
b = Vector2d(10,0)
print(bool(b)) #True
注意::如果我们没有定义__bool__
,它将始终返回True,因为默认情况下,用户定义类的实例被认为是真实的。
这本书的示例:“精通Python,清晰,简洁,有效的编程”
答案 3 :(得分:2)
真实值是指在布尔上下文中使用的对象,而不是返回true或false的布尔值。以这些为例:
>>> bool([])
False
>>> bool([1])
True
>>> bool('')
False
>>> bool('hello')
True
答案 4 :(得分:2)
您应在哪里使用Truthy或Falsy值? 这些是语法糖,因此您始终可以避免使用它们,但是使用它们可以使您的代码更具可读性并提高效率。 此外,无论是否在python中,您都会在许多代码示例中找到它们,因为这被认为是一种很好的做法。
如其他答案所述,您可以在if测试和while循环中使用它们。这是python 3中的其他两个示例,其默认值与or
组合在一起,其中s
是字符串变量。您还将扩展到类似情况。
没有道理
if len(s) > 0:
print(s)
else:
print('Default value')
说实话更简洁:
print(s or 'Default value')
在python 3.8中,我们可以利用赋值表达式:=
没有道理
if len(s) == 0:
s = 'Default value'
do_something(s)
诚实,它也更短
s or (s := 'Default value')
do_something(s)
或更短
do_something(s or (s := 'Default value'))
没有赋值表达式,一个人就可以做
s = s or 'Default value'
do_something(s)
,但不能更短。有些人发现s =...
行不令人满意,因为它对应于
if len(s)>0:
s = s # HERE is an extra useless assignment
else:
s = "Default value"
不过,只要您愿意,就可以坚持使用这种编码样式。
答案 5 :(得分:0)
Python将值转换为布尔值,以确定真值和假值。
例如 is_old = 49实际上会解释为is_old = bool(49), 依次返回True
另一个例子 is_string =''将返回false,因为空字符串将被解释为false
答案 6 :(得分:0)
如果if (!id) {}
!expr 返回 false
,如果它的单个操作数可以转换为 true
;否则,返回 true
。
如果一个值可以转换为true,那么这个值就是所谓的truthy。如果一个值可以转换为false,那么这个值就是所谓的falsy。
可以转换为 false 的表达式示例有:
null;
NaN;
0;
empty string ("" or '' or ``);
undefined.
即使 !
运算符可以用于非布尔值的操作数,它仍然可以被视为布尔运算符,因为它的返回值始终可以转换为布尔基元。要将其返回值(或一般的任何表达式)显式转换为相应的布尔值,请使用双 NOT 运算符或布尔构造函数。
示例:
n1 = !null // !t returns true
n2 = !NaN // !f returns true
n3 = !'' // !f returns true
n4 = !'Cat' // !t returns false
而在 if (id != null) {}
的情况下,它只会检查 id 中的值是否不等于 null
参考https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_NOT
答案 7 :(得分:-3)
Falsy表示空值,例如空列表,元组,任何具有空值或无的数据类型。 真实的意思是: 除了真相