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)
试试。