python의 장식물 및 실용 예

9824 단어 Python

개시하다


장식물이 무엇인지 설명하기 전에 간단한 문제부터 해결하자

질문 1


def.py
   def print_str():
       print("hello world")
print_"Hello World"를 출력하는 동시에 현재 시간도 출력하세요.
print_1.py
   # 時間モジュールをインポート
   from datetime import datetime

   def print_str():
      print("hello world")
      print(datetime.now())

   print_str()

   #出力結果
   hello world
   2019-06-15 00:09:09.878962

함수 내부에 출력 시간의 코드를 추가하면 간단하게 완성할 수 있습니다
그럼 문제를 좀 바꿔 봅시다.

질문 2


print_str 함수가 존재합니다. "Hello World"를 출력하는 동시에 현재 시간을 출력합니다.ただし、関数内部で時間出力のcodeを追加してはならない
print_2.py

from datetime import datetime

def decorator(func):
    def wrapper():
        print(datetime.now())
        func()
    return wrapper

def print_str():
    print("hello world")

f = decorator(print_str)
f()

#出力結果
2019-06-15 09:28:45.585808
hello world

경계 정의


여기에 정의된 함수입니다.장식물입니다.
문제에 따라 장식물의 정의를 설명하자면
함수 내부를 변환하지 않고 새로운 기능을 동적으로 추가할 수 있습니다.

간편한 호출 방법


@ 태그 + 함수명은 함수에 장식물을 간단하게 설치할 수 있습니다
print_3.py
def decorator(func):
    def wrapper():
        print(datetime.now())
        func()
    return wrapper

# @マーク+関数名でデコレーターを関数に簡単に装着も可能
@decorator
def print_str():
    print("hello world")

print_str()

# 出力
2019-06-15 09:39:06.419550
hello world

여러 개의 매개 변수가 존재하는 함수의 대응 방법


print_4.py
from datetime import datetime

def decorator(func):
    # 可変長引数をデコレーターにあたえ
    def wrapper(*args, **kw):
        print(datetime.now())
        func(*args, **kw)
    return wrapper

@decorator
def print_str(name, **kw):
    print("hello world" + name)
    print(kw)

print_str(" byby",a=1,b=2)

#出力
2019-06-15 10:00:03.465790
hello world byby
{'a': 1, 'b': 2}

Flash에 배치된 장식물의 인스턴스



플래시를 간단히 소개합니다.decorator
플래시에서 장식용 예를 살펴봅시다. 플래시를 몰라도 괜찮아요. 제가 설명해 드릴게요.
flask.py
@api.route('/get', methods=['GET'])
def test_get_rout():
    name = request.args.get('name')
    return name, 200
# Djangoの場合はrouteファイル存在しますが
# flaskではデコレーターでルーティングを実現してます

@api.route('/psw',methods=['GET'])
@auth.login_required
def get_psw():
    psw = request.args.get('psw')
    return 'ok', 200

# 一つの関数に対して複数のデコレーターをつけることも可能
# @auth.login_requiredはこのrouteのアクセス権限を決めてます

flack 루트의 변송기는 대량의 코드로 이루어진다.
함수에 정의되면 함수의 내용이 팽창하여 읽기 어려운 코드가 됩니다. 볼록기를 사용하면 이 문제를 잘 피할 수 있다고 생각합니다. 볼록기의 실용적인 예입니다.
Simple is better than complex.
복잡하기보다는 간단명료한 것이 낫다철학 입문

좋은 웹페이지 즐겨찾기