拷贝
import copy
a=3
b=3
print(a==b)
print(id(a)==id(b))
c=3
d=c
print(id(c)==id(d))
import copy
a=[1,2,3]
b=[1,2,3]
print(a==b) #相同
print(id(a))
print(id(b))
c=a
print(id(a)==id(c)) #地址相同
a.append(4)
print(c)
a=3
b=a
a=4
print(b)
import copy
a=3
b=copy.copy(a)
c=copy.deepcopy(a)
print(a,b,c)
print(id(a)==id(b)==id(c))
import copy
a=[1,2,3]
b=a
c=copy.copy(a)
d=copy.deepcopy(a)
print(id(a)==id(b))
print(id(a)==id(c))
print(id(a)==id(d))
print(id(a))
print(id(c))
print(id(d))
copy.copy() #拷贝外层,内层还是用地址
copy.deepcopy() #从里到外彻彻底底的拷贝,不管多少层,全部拷贝
import copy
a=[1,2,3,[4,5,6]]
b=a
c=copy.copy(a) #当浅copy的时候,第一层是新的,第二层用的还是原来的地址
d=copy.deepcopy(a) #当用深copy的时候,所有的内容都是新的,所以不会影响地址
print(id(a)==id(b))
print(id(a)==id(c))
print(id(a)==id(d))
a.append(9)
print(c)
print(d)
a[3].append(99)
print(c)
print(d)
迭代
a=[1,2,3] #列表,元组,字符串,集合,都能迭代
b=iter(a) #迭代器,一次输出一个
print(next(b))
print(next(b))
print(next(b))
print(type(b))
生成器
def hanshu(n):
i=0
while i<n:
yield i
i+=1
a=hanshu(1000)
print(next(a))
print(next(a))
print(next(a))
print(next(a))
print(next(a))
def fbnq(n):
a,b=0,1
i=0
while i<n:
a,b=b,a+b
yield a #返回a的值
i+=1
f=fbnq(10)
for x in f:
print(x)
def a(b):
b()
def x():
print('123')
a(x)
装饰器
import time
def hx(f): #装饰器的函数,f接受被装饰的函数名
def neibu(): #装饰内部函数
start=time.time()
f() #调用被装饰的函数
end=time.time()
print(end-start)
return neibu() #装饰器返回内部函数。(内部代表的是包装盒)
@hx #@加函数名,代表下面的函数被hx装饰
def jisuan():
print('123456')
jisuan
import time
def decor(func):
def nb(cs):
print('***************')
func(cs)
print('***************')
return nb
@decor
def ych(name):
print(name,'开演唱会')
ych('刘德华')
import time
def decor(func):
def nb(cs):
print('***************')
func(cs)
print('***************')
return nb
def dd(func):
def nb(cs):
print('###############')
func(cs)
print('###############')
return nb
@dd
@decor
def ych(name):
print(name,'开演唱会')
ych('刘德华')
装饰器形成了闭包
def hanshu(b): # 1,外部函数包含内部函数的函数
a=3
def nb(c): #闭包
d=a*b+c #3,内部函数使用了外部函数的变量
return d
return nb #2,外部函数返回内部函数名
x=hanshu(4)
print(x(5))
print(x(6))