# Python数据类型困惑集锦 # 惰性求值 将计算推迟到需要的时候进行,惰性(也称“非严格”)求值非常重要,是函数式编程高效的原因之一。 ## 运算符

116 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天

Python数据类型困惑集锦

惰性求值

将计算推迟到需要的时候进行,惰性(也称“非严格”)求值非常重要,是函数式编程高效的原因之一。

运算符

and or if-then-else(也称之为“短路”运算符,因为它们不需要计算全部参数就能得到最终结果)

 >>> 0 and print("right")
 0
 >>> True and print("right")
 right

如果and运算符左边的表达式值为False,不会对右边的表达式求值;只有当左边的表达式值为True时,才会对右边的表达式求值

其他

除此之外,Python使用严格求值规则。除了逻辑运算符,表达式都是严格地从左向右求值的。一组语句也是严格按顺序求值的,列表字面量和元组亦然。

类的定义与覆盖

当创建一个类时,它的各个方法是严格按顺序定义的。在类的定义中,所有方法在创建之后(默认)被放入一个字典,并不会保持之前的顺序。如果在一个类中创建两个名字相同的方法,那么由于严格的求值顺序,只会保留后面的方法,前面定义的方法会被覆盖掉。

range函数

Python 2的range()函数是严格求值的,创建后就会生成所有包含的值。Python 3的range()函数是惰性求值的,不会创建大型数据结构。

说明

一个生成器只能用一次

items函数

定义

items() 方法的遍历:items() 方法把字典中每对 key 和 value 组成一个元组,并把这些元组放在列表中返回

item()

item()的作用是取出单元素张量的元素值并返回该值,保持该元素类型不变。

区别

item函数比用索引来取值的精度更高,求损失函数时会用到