Since Flask uses route() decorator to bind a function to a URL (Routing), this blog gives naive decorators and its corresponding code without decorator.
Level 1 (no parameters)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
def (func) : def inner () : print("start" ) func() print("end" ) return inner def log () : print("logging" ) log = wrapper(log) log()
Corresponding decorator :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
def (func) : def inner () : print("start" ) func() print("end" ) return inner def log () : print("logging" ) log()
output: start logging end
Level 2 (require parameter for log)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
def (func) : def inner (file_name) : print("start" ) func(file_name) print("end" ) return inner def log (file_name) : print("logging " + file_name) log = wrapper(log) log('file' )
Corresponding decorator :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
def (func) : def inner (file_name) : print("start" ) func(file_name) print("end" ) return inner def log (file_name) : print("logging " + file_name) log('file' )
output: start logging file end
Level 3 (Require parameter for decorator)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
def (path_name) : def decorator (func) : def inner () : print("start logging in " + path_name) func() print("end" ) return inner return decorator def log () : print("logging" ) log = wrapper('path' )(log) log()
Corresponding decorator:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
def wrapper (path_name) : def decorator (func) : def inner () : print("start logging in " + path_name) func() print("end" ) return inner return decorator @wrapper("path") def log () : print("logging" ) log()
output: start logging in path logging end
Level 4 (Require parameter for decorator&log)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
def wrapper (path_name) : def decorator (func) : def inner (file_name) : print("start logging in " + path_name) func(file_name) print("end" ) return inner return decorator def log (file_name) : print("logging " + file_name) log = wrapper('path' )(log) log('file' )
Corresponding decorator :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
def wrapper (path_name) : def decorator (func) : def inner (file_name) : print("start logging in " + path_name) func(file_name) print("end" ) return inner return decorator @wrapper('path') def log (file_name) : print("logging " + file_name) log('file' )
output: start logging in path logging file end
近期评论