(0)为什么
print foo()
会输出None
,可见foo()
或者没有返回值,或者返回的对象为空;(1)迭代 zip(x, y) 时,每次取出的元素是二元元组(tuple),该二元元组由 x,y 的对应位上的元素组成;
list.append() 的参数为 list comprehension
此时添加的是一个 list,而不是逐元素地添加;
>>> l = []
>>> l.append([x for x in range(10) if x % 2==0])
>>> l
[[0, 2, 4, 6, 8]]
>>> l.append((x for x in range(10) if x % 2==0))
[[0, 2, 4, 6, 8], <generator object <genexpr> at 0x02F05BE8>]
# 添加进去的是 generator
和 list comprehension 相搭配的是 list.extend();
range 左边界小于右边界
>>> range(2, 1)
range(2, 1)
最危险的莫过于不直接报错,
(1)索引时会报错,因其区间长度为 0
>>> range(2, 1)[0] IndexError: range object index out of range
(2)迭代时,不会进入循环体:
>>> for i in range(2, 1): print(i) >>>
三维数组(ndarray)的访问
X[:, :, 0] 与 X[0, :, :]
>> X = np.random.randn(2, 3, 2)
array([[[ 0.26137804, 0.46003339],
[ 0.94744861, 0.38409255],
[ 0.78010047, 1.44591233]],
[[-0.25581073, -0.17355291],
[ 1.81726758, 2.07810646],
[ 0.88703373, -0.95118625]]])
>> X[:, :, 0]
array([[ 0.26137804, 0.94744861, 0.78010047],
[-0.25581073, 1.81726758, 0.88703373]])
>> X[0, :, :]
array([[ 0.26137804, 0.46003339],
[ 0.94744861, 0.38409255],
[ 0.78010047, 1.44591233]])
连等号
>> y = np.zeros((10, 1))[5] = 1
y
直接等于1
,而不会是别的。
- 表达式本身没有返回值(不像C/C++返回左值),
- 连等号的含义是多变量指向同一内存对象,
- np.zeros((10, 1))[5] 指向1
- y 也指向 1
最后
以上就是阔达小刺猬最近收集整理的关于Python debug —— 逻辑错误(三)的全部内容,更多相关Python内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复