python - 了解如果做?
问题描述
我正在阅读“使用 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 是一个列表。我不明白列表如何以某种有序的方式评估为真或假。
解决方案
True
Python中始终考虑非空集合(如列表)。
从文档中:
可以测试任何对象的真值,用于 if 或 while 条件或作为以下布尔运算的操作数。
默认情况下,一个对象被认为是真,除非它的类定义了一个
__bool__()
返回 False 的__len__()
方法或一个返回零的方法,当与该对象一起调用时。以下是大多数被认为是错误的内置对象:
- 常量定义为假:
None
和False
。- 任何数字类型的零:
0
,0.0
,0j
,Decimal(0)
,Fraction(0, 1)
空序列和- 集合:
''
,()
,[]
,{}
,set()
,range(0)
你是对的,在某些情况下这看起来有点奇怪:
if [False]:
print(True) # Prints True
这是一个设计决策,确保(用你的话来说)“列表可以以某种有序的方式评估为真或假”。Python 的设计者选择的有序方式是空对象一般是False
,里面有东西的对象一般是True
.
推荐阅读
- jupyter-lab - jupyter-lab 中的“为输出创建新视图”不适用于全息视图
- linux - 使用 QML 调试标志点安装 PyQt5
- xml - 需要帮助 XSLT 2.0
- scala - 使用 scalapb 为地图编写 TypeMapper
- google-sheets - Google表格中的COUNTIF具有多个“非”或“否则”而不是来自Google表单的响应条件
- php - FPDF 在 Firefox 和 chrome 中的名称不同
- ssh - 如何告诉 ssh 不要要求输入密码
- php - 无法在实时服务器上获得对 Ajax 请求的 JSON 对象响应
- javascript - 检测 Bootstrap 4 支持的 Javascript 代码
- powershell - 无法使用 docker run -v 指定当前目录