Python--拷贝 迭代 生成器 装饰器 闭包

拷贝

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

猜你喜欢

转载自blog.csdn.net/bzzb_/article/details/88562418