我是靠谱客的博主 阔达小刺猬,这篇文章主要介绍Python debug —— 逻辑错误(三),现在分享给大家,希望可以做个参考。

  • (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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部