Existen parámetros para explicar el decorador en la escritura de la lección
la auth DEF (tipo_bd): DEF warpper (FUNC): DEF interior (* args, ** kwargs): nombre = input ( 'nombre:') .strip () PWD = input ( 'pwd:') .strip () IF == 'archivo' tipo_bd: Imprimir ( 'verificación del archivo de registro') SI (nombre, PWD) == ( 'Egon', '123'): Imprimir ( 'Inicio de sesión correcto') RES = func (* args, ** kwargs ) de retorno RES la cosa: Imprimir ( 'nombre de usuario o contraseña es incorrecta') elif tipo_bd == 'archivo': Imprimir ( 'verificación del archivo de registro') SI (nombre, PWD) == ( 'Egon', '123'): imprimir (Inicio de sesión exitoso ') FUNC = RES (* args, ** kwargs) RES regresan el else: print ( 'nombre de usuario o contraseña') vuelven interna de retorno warpper @auth ( 'Archivo') def index (): print ( '123') index ()
Recuerde el concepto que utilizamos objeto función, por lo que es la operación de la función de un diccionario
Vamos, vamos, tenemos más práctica en la amplia y vacía el diccionario de archivo de una declaración al comienzo
A continuación, añadir decorador antes de cada función, para completar la operación automática añadido al diccionario
cmd_dict = {} def append2dict (TIPS): def envoltura (FUNC): (args *, ** kwargs) def interiores: index = len (cmd_dict) + 1 cmd_dict [str (índice)] = (consejos, func) regresan interior volver envoltorio def auto_append (): mi_func = {k:. v para k, v en variables globales () artículos () si se puede llamar (v) si k no en { 'append2dict', 'auto_append'}} de func en my_func.values (): func () @ append2dict (consejos = '登录') def login (): print ( 'esto es login') @ append2dict ( '注册') def registro (): print ( 'esto es registrar') auto_append ( ) , mientras que 1: para k,v en cmd_dict.items (): Imprimir (. F '{K} - {V [0]}' Centro (20 es, '-')) cmd = input ( 'por favor número de salida:'). Strip () SI cmd No en cmd_dict: Imprimir ( 're entrada ') Continuar FUNC = cmd_dict.get (cmd) [. 1] FUNC ()
Escribiendo decorador de registro, poner en práctica las funciones tales como: Una vez que la función f1 a cabo, el mensaje 21/07/2017 11:12:11 carrera f1 se escribe en el archivo de registro, la ruta del archivo de registro se puede especificar. Nota: El formato de tiempo de adquisición
tiempo de importación def my_log (FILE_PATH): def envoltura (func): def interiores (* args, ** kwargs): ahora = time.strftime ( '% Y-% m-% d% H:% M:% S') msg = f '{ahora} {func .__ name__} run \ n' con abierto (FILE_PATH, 'a', que codifica = 'utf-8') como f: f.write (msg) res = func (* args, * * kwargs) res de retorno vuelven interna de retorno envoltorio @my_log ( 'log.txt') def f1 (): print ( 'soy f1') f1 ()
4, sobre la base de una manera iterativa, las cadenas de valor, listas, tuplas, diccionarios, mientras iteración del bucle, establecen el objeto de archivo
my_obj = '2333' my_obj_i = my_obj .__ __ iter () while True: try: impresión (my_obj_i .__ próxima __ ()) , excepto StopIteration: ruptura
my_obj = [1,2,3] my_obj_i = my_obj .__ iter __ () while True: try: impresión (my_obj_i .__ siguiente __ ()) excepto StopIteration: descanso
my_obj = (4,5,6) my_obj_i = my_obj .__ __ iter () while True: try: impresión (my_obj_i .__ próxima __ ()) , excepto StopIteration: ruptura
my_obj = {1: 1, 2: 2, 3: 3} my_obj_i = my_obj .__ iter __ () while True: try: impresión (my_obj_i .__ siguiente __ ()) excepto StopIteration: descanso
my_obj = {1,2,3} my_obj_i = my_obj .__ __ iter () while True: try: impresión (my_obj_i .__ próxima __ ()) , excepto StopIteration: ruptura
con ( 'aaa.txt', modo = 'rt', que codifica = 'utf-8') abierto while True: try: impresión (f .__ siguiente __ ()) excepto StopIteration: descanso
5 iteradores personalizadas implementan la función gama
def my_range (inicio, final, paso = 1): mientras inicio <final: inicio rendimiento de inicio + = paso g = my_range (1,5) para i en g: impresión (i)