This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import dek | |
@dek | |
def print_before(pfunc, label='label'): | |
print(label, pfunc) | |
return pfunc() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Correct decorator for an optional parameter | |
def print_before4(label='label'): | |
def decorator(func): | |
@functools.wraps(func) | |
def wrapped(*args, **kwargs): | |
print(label, args, kwargs) | |
return func(*args, **kwargs) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@print_before3() | |
def mj1(a, b, c): | |
pass | |
@print_before3('OK') | |
def mj2(one, two, three): | |
pass | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@print_before3() | |
def important(lives, money, valuables=None): | |
pass | |
@print_before3('BORING:') | |
def dull(*args, **kwds): | |
pass | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Almost right | |
def print_before3(label='DEBUG:'): | |
def decorator(func): | |
@functools.wraps(func) | |
def wrapped(*args, **kwds): | |
print(label, func.__name__, args, kwds) | |
return func(*args, **kwds) | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Version 3 | |
def print_before2(label): | |
def decorator(func): | |
@functools.wraps(func) | |
def wrapped(*args, **kwds): | |
print(label, func.__name__, args, kwds) | |
return func(*args, **kwds) | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# WRONG | |
def print_before(func, label): | |
@functools.wraps(func) | |
def wrapped(*args, **kwds): | |
print(label, func.__name__, args, kwds) | |
return func(*args, **kwds) | |
return wrapped | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import functools | |
def print_before(func): | |
@functools.wraps(func) | |
def wrapped(*args, **kwds): | |
print(func.__name__, args, kwds) | |
return func(*args, **kwds) | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@print_before | |
def important(lives, money, valuables=None): | |
"""Do big, important things!!""" | |
pass | |
>>> important(23, 105.17, valuables=['dogs']) | |
important (23, 105.17) {'valuables': ['dogs']} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def print_before(func): | |
def wrapped(*args, **kwds): | |
print('Before:', func.__name__, args, kwds) | |
return func(*args, **kwds) | |
return wrapped |