99%的人都会忽略的Python易错点总结

本文总结了Python编程中容易忽视的问题,包括复数运算(-2)**0.5与sqrt(-2)的区别,循环构造函数数组时返回值相同的原因,list的extend()与append()操作的差异,类变量通过类名和self访问的微妙区别,以及tuple不可修改的特性。同时探讨了Python中的魔法方法和变量地址问题。
摘要由CSDN通过智能技术生成

python中复数实现(-2)**0.5和开根号sqrt(-2)的区别

(-2)**0.5和sqrt(-2)是不同的,前者是复数后者是会报错的。

print((-2)**0.5)
#输出:(8.659560562354934e-17+1.4142135623730951j)

import math
math.sqrt(-2)#报错
ValueError: math domain error

Python用循环构造的函数数组,运行这个数组里面的函数后返回值都一样

functions = []
for i in range(5):
    def f(x):
      return x + i
    functions.append(f)

for f in functions:
    print(f(7))
上面程序的输出是:
11
11
11
11
11

为什么明明f(x)返回的是x+i,而i是从0到4变化的。按道理执行f(x)后的返回值也应该是变化的,为何我们执行f(x)后是5个一样的值。
答:这是因为python中函数保存的外面的变量都是存储的是地址。也就是说x+i中的i是地址,循环执行完成后。i这个地址的值变成了4.所以最后执行f(7)就是一直是11==7+4.
不信你可以输出id(i)试试。

注意:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值