날 (13)이 요약되어있다 (폐쇄 기능, 장식, 반복자)

첫째, 폐쇄 기능

1. 폐쇄는 무엇입니까?

  • 폐쇄 : 폐쇄 된 (내부 함수의 함수)를 닫으면, 상기 패키지 (내부 함수보다는 글로벌 범위의 가변 범위 외부 참조)이다.
  • 폐쇄 수단은 : 내부, 외부 기준의 기능 및 전역이 아니 범위의 기능.
def outter():
    x = 1

    def inner():
        print(x)
    return inner


f = outter()


def f2():
    x = 2
    f()


f2()

함수의 매개 변수 전달 모드의 두 가지 유형 1.1

방법 1 : 형식 매개 변수

def func(x):
    print(x)


func(1)
func(1)
func(1)
1
1
1

두 번째 방법 : 패킷 기능

def outter(x):
    x = 1

    def inner():
        print(x)
    return inner


f = outter(1)
f()
f()
f()
# 查看闭包的元素
print(F"f.__closure__[0].cell_contents: {f.__closure__[0].cell_contents}")
1
1
1
f.__closure__[0].cell_contents: 1

2 밀폐 기능인가

의미 폐쇄 패키지 : 함수는 함수 관계없이 우선적으로 외부 층은 자신의 범위를 감싸 곳의 호출하게 또한 레이어에 싸여 범위 기능, 외부 개체, 단지 함수 객체를 반환합니다.

응용 프로그램 : 지연 계산 (우리는 대중의 참여, 그리고 지금 우리가 싸서하는 것으로 나타났다), 파충류 필드.

import requests


def outter(url):
    def get():
        response = requests.get(url)
        print(f"done: {url}")
    return get

baidu=outter('https://www.baidu.com')
python = outter('https://www.python.org')

baidu()
baidu()

python()
python()
done: https://www.baidu.com
done: https://www.baidu.com
done: https://www.python.org
done: https://www.python.org

둘째, 장식

(1)에는 기준 장식하지

1.1 장식은 무엇인가?

장치는 공구를 지칭하고, 프로그램의 함수가 장식 오브젝트에 추가 기능을 추가하는 장식 지칭 기능성 도구를 가지고있다. 따라서, 장식 정의 함수를 정의하지만, 함수의 기능은 다른 기능으로 기능을 추가하는 데 사용된다.

그 참고 :

  • 실제로 호출 할 수있는 모든 개체를 할 수 있습니다 자신을 장식
  • 미늘 객체는 호출 객체가 될 수

1.2 왜 장식을 사용합니까?

두 가지 원칙을 따라야 장식을 달성 :

  1. 객체의 소스 코드를 수정하지 않습니다 장식한다
  2. 전화는 장식용 물건의 방식을 수정하지 않습니다

사실 실내 장식은, 위의 두 가지 원칙을 다음의 전제 장식 할 수있는 객체에 새로운 기능을 추가 할 수 있습니다.

1.3 장식 템플릿 (더블 장식)

def outter(func):
    def wrapper(*args, **kwargs):  # wrapper是未来要运行的函数
        # 加功能
        res = func(*args, **kwargs)  # func是被装饰的函数
        return res

    return wrapper

첫 번째 매개 변수 전달 모드 : 방법으로 통화를 변경

mport time


def index():
    print('welcome to index')
    time.sleep(1)


def time_count(func):
    start = time.time()
    func()
    end = time.time()
    print(f"{func} time is {start-end}")


time_count(index)
welcome to index
<function index at 0x102977378> time is -1.000748872756958

두 번째 매개 변수 전달 모드 : 패킷 기능 - 아웃소싱

import time


def index():
    print('welcome to index')
    time.sleep(1)


def time_count(func):
    # func = 最原始的index
    def wrapper():
        start = time.time()
        func()
        end = time.time()
        print(f"{func} time is {start-end}")
    return wrapper

# f = time_count(index)
# f()


index = time_count(index)  # index为被装饰函数的内存地址,即index = wrapper
index()  # wrapper()
welcome to index
<function index at 0x102977730> time is -1.0038220882415771

2 기준 장식

참조 장식이있다, 그러나 지금의 등록 된 사용자 로그인 장식을 구현하자 - 매개 변수 설정 장식 두 층이 섹션은 세 세트 데코레이터를 말할 것이다.

세 가지 장식 템플릿

def sanceng(engine):
    def outter(func):
        def wrapper(*args, **kwargs):  # wrapper是未来要运行的函数
            # 加功能
            print(engine)
            res = func(*args, **kwargs)  # func是被装饰的函数
            return res

        return wrapper

    return outter

셋째, 반복자

반복자 : 도구 반복. 반복 당신의 할아버지가 아버지를 낳았다 같은 업그레이드하고, 당신의 아버지가 당신에게 출산, 반복은 반복 될 수 있다고, 모든 시간을 반복하지만, 마지막의 결과에 기초 할 수있다. 이러한 컴퓨터의 반복 개발은 소프트웨어의 버전을 기반으로 업데이트 될 때. 다음 코드는 단순한 반복의 반복적 없습니다.

1, 반복 가능 객체

개요

반복 가능한 객체 : 파이썬 내장 STR,리스트, 터플, 딕셔너리, 설정 파일이 반복 가능한입니다.

특징 :

  1. 내장 __iter__객체 메소드 반복을 호출 할 수 있습니다.

2 반복자 객체

반복 가능한 다른 인덱스의 값에 의존하지 않는 동안 만 문자열과 목록, 색인의 값에 따라 달라집니다. 그래서 우리는 다른 반복자는 인덱스 값에 의존하지 않고 만들 수있는 방법을 찾아야한다.

수행 할 수있는 반복 가능한 개체 : 개념이 방법을 발견하기 전에, 우리는 먼저 반복자 객체 줄 __iter__의 방법으로 얻은 반환 값을. 그리고 객체는 반복해야합니다 __next__방법을.

개요

반복자 개체 : 반복 객체 실행 수도 __iter__반복자 객체를 반환 값을 얻는 방법.

특징 :

  1. 내장 __next__방법, 방법은 값 반복자 객체를 얻을 것이다 수행
  2. 내장 __iter__방식의 구현은 반복자 자체를 얻을 것이다
  3. Iterator 객체는 파일 자체.

단점 :

  1. 문제의 가치, 하나 걸릴 및 이후 버전에서만 촬영, 사라 값을 취할 수
  2. 당신은 길이를 얻을 수 LEN () 메소드를 사용할 수 없습니다

3, 순환 원칙

for 루프는 반복자 루프가 반복 오브젝트에 있어야했다.

lis = [1, 2, 3]
for i in lis:
    print(i)
1
2
3

반복자 사용하기 때문에 __iter__개체 또는 for 루프 반복 반복자 객체 또는 객체가 상기 반복기 자체 후 때문에 고려되지.

이용이 반복 가능 객체에 의한 __iter__반복자 방법 후에 대상이 반복자 오브젝트가 단지 작은 메모리 공간을 차지한다, 그는 단지 사용하는 __next__하나 개의 값을 뱉어. AS lis = [1,2,3,4,5,...]계란의 동등한있는 동안 lis = [1,2,3,4,5,...].__iter__당신이 계란을 필요로하는 경우 오래된 암탉의 동등한 만 __next__수행 할 수 있습니다.

에서 Python3

print(range(10))  # range(0, 10)

추천

출처www.cnblogs.com/mgytz/p/11545033.html