2017.7.14 요약(교체기, 클러치, 장식기)

3815 단어
교체기: 교체는 집합 요소에 접근하는 방식의 하나입니다.교체기는 누적된 위치를 기억할 수 있는 대상이다.교체기 대상은 집합의 첫 번째 요소부터 모든 요소가 다 접근될 때까지 접근합니다.교체기는 앞으로 갈 수 있을 뿐 후퇴하지 않는다.
import collections     # 
isinstance(object,collections.Iterable)  # 
isinstance(object,collections.Iterator)  # 

생성기는 모두 Iterator의 대상이지만list,dict,str는 Iterable이지만 Iterator가 아니다.list, dict,str 등의 Iterable를 Iterator로 변환하려면 iter () 함수를 사용할 수 있습니다.
ls = [x for x in range(10)]
it = iter(ls)

교체기는next()에 호출될 수 있습니다
from xxx import xxx는 xxx와 같습니다.xxx
from collections import Iterator == collections.Iterator

패킷 닫기: 함수 내부에서 함수를 다시 정의하고 이 함수는 외부 함수의 변수를 사용한다. 그러면 이 함수와 사용된 일부 변수를 패킷이라고 부른다.
def outside(a,b):
        def inner(x):
               return a*x+b
         return inner

ret = outside(2,5)
print(ret(10))
>>25

1. 클로즈업은 변수를 최적화한 것처럼 원래 클래스 대상이 완성해야 하는 작업은 클로즈업도 완성할 수 있다.클로즈업이 외부 함수의 국부 변수를 인용했기 때문에 외부 함수의 국부 변수는 제때에 방출되지 않고 메모리를 소모한다
장식기: 장식기, 기능은 원래의 기능을 운행하는 기초 위에서 권한의 검증, 예를 들어 로그의 기록 등 다른 기능을 추가하는 것이다.원래의 코드를 수정하지 않고 기능의 확장을 진행하다.예를 들어 자바의 동적 에이전트,python의 주석 장식기는 사실python의 장식기로서 코드를 수정했다.
def outside(func):
       def  inner():
            print(' ')
            func()
       return inner

@outside
def run():
      print(' ')  

run()

>> 
>> 

@outside에서run 함수를 매개 변수로 호출할 수 있습니다
여러 개의 장식기는 안에서 밖으로(아래에서 위로) 선후 순서에 따라 집행한다
def outside1(func):
    def inner1():
        return '——1——'+func()+'——1——'
    return inner1
    
def outside2(func):
    def inner2():
        return '——2——'+func()+'——2——'
    return inner2
    
@outside1
@outside2
def run():
    return('Irlans')

print(run())
>>——1————2——Irlans——2————1——

장식된 함수에는 매개 변수가 있습니다
def outmost(pre):
    def outside(func):
        def inner():    
            print('%s%s'%(pre,func()))
        return inner
    return outside


@outmost('wangcai')
def run():
    return(' 5 ')
    
run()
>>wangcai 5 

장식된 매개변수에는 다음과 같은 부정확한 길이 매개변수가 있습니다.
from time import ctime, sleep

def timefun(func):
    def wrappedfunc(*args, **kwargs):
        print(args)
        print(kwargs)
        print("%s called at %s"%(func.__name__, ctime()))
        func(*args,**kwargs)
    return wrappedfunc

@timefun
def foo(a, b, c,num):
    print(a+b+c)
    print(num)

foo(3,5,7,num=123)
>>(3, 5, 7)
>>{'num': 123}
>>foo called at Fri Jul 14 20:31:06 2017
>>15
>>123

클래스 장식기:
class Test(object):

    def __init__(self, func):
        print("--- ---")
        print("func name is %s"%func.__name__)
        self.__func = func

    def __call__(self):
        print("--- ---")
        self.__func()


def laowang():
    print("----laowang---")


t = Test(laowang)
t()
>>--- ---
>>func name is laowang
>>--- ---
>>----laowang---
class Test(object):

    def __init__(self, func):
        print('id(self)=%s,id(func)=%s,func=%s'%(id(self),id(func),func))
        print("--- ---")
        print("func name is %s"%func.__name__)
        self.__func = func

    def __call__(self):
        print("--- ---")
        return self.__func()

@Test           #laowang = Test(laowang)
def laowang():
    return "----laowang---"

print(laowang())

print(id(laowang))
print(laowang)
>>func name is laowang
>>--- ---
>----laowang---
>>18534296
>><__main__.test object="" at="">

좋은 웹페이지 즐겨찾기