2017.7.14 요약(교체기, 클러치, 장식기)
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="">
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.