通常语言中的 if
语句语法是这样的:python
if (条件表达式)
{
执行语句
}
而在 Python 中,if
后面不只能够是条件表达式,还能够是任意对象。例如:bash
my_list = [1, 2, 3]
if my_list:
print(my_list)
在 Python 中,False、None、数值 0、空序列、空映射都被视为 [假],其余各类值被视为 [真]。app
那么,这是如何实现的呢?背后的原理是什么呢?函数
为了断定一个对象 x 为 [真] 仍是 [假],Python 会调用 bool(x)
函数。该函数背后调用的是魔法方法 __bool__
,若是不存在 __bool__
方法,bool(x)
会尝试调用 __len__
方法。若返回 0,则 bool(x)
返回 False
,不然返回 True
。spa
而默认状况下,咱们自定义的类的实例总被认为是 [真]。code
写个例子验证一下。orm
class MyClass:
def __bool__(self):
return False
my_class = MyClass()
if my_class:
print('真')
else:
print('假')
输出:对象
假
就是说:当对象用于任何须要表示为布尔值的时候,Python 会调用 bool(x)
方法,而咱们能够经过重写 __bool__
方法或 __len__
方法改变默认的判断。ci
Python 中交换两个变量很是简单:string
b, a = a, b
为何能够这样写,是语法糖吗?诚然不是,这是元组拆包。
不明白?写成这样是否是就明白了:
b, a = (a, b)
Python 解析器会自动将 a, b
视做元组,因此上面两个写法是等价的。不信?看下面的例子:
a = 1
b = 2
c = a, b
print(c)
print(type(c))
输出:
(1, 2)
<class 'tuple'>
因此 b, a = a, b
这种写法利用的是元组拆包。