首页 > 解决方案 > 了解如果做?

问题描述

我正在阅读“使用 Python 进行深度学习”这本书,并遇到了以下内容:

def smooth_curve(points, factor=0.9):
     smoothed_points = []
     for point in points:
          if smoothed_points:
                previous = smoothed_points[-1]
                smoothed_points.append(previous * factor + point * (1 - factor))
          else:
               smoothed_points.append(point)
     return smoothed_points
smooth_mae_history = smooth_curve(average_mae_history[10:])

我以前从未见过这种表示法,第 4 行代码“if smoothed_points”。Smoothed_points 是一个列表。我不明白列表如何以某种有序的方式评估为真或假。

标签: python

解决方案


TruePython中始终考虑非空集合(如列表)。

文档中:

可以测试任何对象的真值,用于 if 或 while 条件或作为以下布尔运算的操作数。

默认情况下,一个对象被认为是真,除非它的类定义了一个__bool__()返回 False 的__len__()方法或一个返回零的方法,当与该对象一起调用时。以下是大多数被认为是错误的内置对象:

  • 常量定义为假:NoneFalse
  • 任何数字类型的零:0, 0.0, 0j, Decimal(0),Fraction(0, 1)空序列和
  • 集合:'', (), [], {}, set(),range(0)

你是对的,在某些情况下这看起来有点奇怪:

if [False]:
  print(True) # Prints True

这是一个设计决策,确保(用你的话来说)“列表可以以某种有序的方式评估为真或假”。Python 的设计者选择的有序方式是空对象一般是False,里面有东西的对象一般是True.


推荐阅读