mygenerator=[value*2 for value in range(4)]
print(mygenerator)
mygenerator=(value*2 for value in range(4))
print(mygenerator)
当[]变成()时,mygenerator由列表,变成了生成器
def fibonacci(num):
a=0
b=1
currnet_index=0
while currnet_index<num:
result=a
a,b=b,a+b
currnet_index+=1
yield result
f=fibonacci(10)
for value in f:
print(value)
这里变量交换比较有意思 python是可以直接交换的,a,b=b,a+b,而且是可以运算后交换
同时和递归写法斐波那契数列比较,运行速度会快很多
# 1,1,2,3,5,8,13,21,34,55,试判断数列第十个数是哪个?
def fabonacci(n):
''' n为斐波那契数列 '''
if n <= 2:
''' 数列前两个数都是1 '''
v = 1
return v # 返回结果,并结束函数
v = fabonacci(n-1)+fabonacci(n-2) # 由数据的规律可知,第三个数的结果都是前两个数之和,所以进行递归叠加
return v # 返回结果,并结束函数
print(fabonacci(10)) # 55 调用函数并打印结果
拷贝无论深浅,都是针对可变类型。
import copy
mylist1=[1,3,[4,5]]
mylist2=copy.copy(mylist1)
print("1----",id(mylist1),"2----",id(mylist2))
mylist1.append(6)
print(mylist1,mylist2)
print("1----",id(mylist1[2]),"2----",id(mylist2[2]))
1---- 3093998009032 2---- 3093998009288
[1, 3, [4, 5], 6] [1, 3, [4, 5]]
"1----",id(mylist1[2]),"2----",id(mylist2[2])地址是一样的
1---- 3093998008968 2---- 3093998008968
import copy
mylist1=[1,3,[4,5]]
mylist2=copy.deepcopy(mylist1)
print("1----",id(mylist1),"2----",id(mylist2))
mylist1.append(6)
print(mylist1,mylist2)
mylist1[2].append(88)
print("1----",id(mylist1[2]),"2----",id(mylist2[2]))
print(mylist1,mylist2)
1---- 2824254126984 2---- 2824254127240
[1, 3, [4, 5], 6] [1, 3, [4, 5]]
"1----",id(mylist1[2]),"2----",id(mylist2[2])地址是不一样的
1---- 2824254126920 2---- 2824254137672
[1, 3, [4, 5, 88], 6] [1, 3, [4, 5]]