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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值