Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo funcionan los decoradores de Python con argumentos variados

Cómo funcionan los decoradores de Python con argumentos variados

El decorador en sí se utiliza para implementar nuevas funciones de la función sin cambiar el código de la función original y su método de llamada.

Hay un problema aquí:

Innumerables funciones llaman al decorador que escribiste, pero el cliente tiene un requisito, es decir, espero poder controlar si el decorador surte efecto.

De esta manera, cuando recibas comandos para eliminar y agregar llamadas de decorador, no podrás entrar en el encabezado de la función original. En este momento, puede usar un decorador con parámetros, definir un interruptor y pasar el parámetro de interruptor del decorador al llamar al decorador, de modo que cuando se enciende el interruptor, el decorador surta efecto y cuando se activa el interruptor off, el decorador Solo se ejecuta el código de la función original.

Ejemplo: Si el parámetro de cambio es Verdadero: F?=?True?#step?1?La variable de cambio del decorador

def?outer(flag):?#step ?2

def?wrapper(func):?#paso?4

def?inner(*args,**kwargs):?#paso?6

if?flag:#paso?9

print('antes')#paso?10

ret?=?func(*args,**kwargs)?#paso ?11 ?Ejecutar la función original

print('after')?

else:

ret?=?func(*args,**kwargs)

p>

imprimir('123')

regresar?#paso?14

regresar?interior#paso?7

regresar ?wrapper#step ?5

@outer(F)#Primero ejecute el paso de función?3?:outer(True), y luego ejecute el paso?6:@wrapper#Aquí el parámetro de cambio se pasa al función decoradora

def?hahaha():

Aprobado. #step?12

jajaja() #?step?8 es equivalente a internal()

El proceso de ejecución cuando el parámetro de cambio es False: F?=?False?#stpe1 ?Decoración La variable de cambio del controlador def?outer(flag):?#step?2 def?wrapper(func):?#step?4 def?inner(*args,**kwargs):?#stpe?6 if ?flag:# paso?9 print('antes') ret?=?func(*args,**kwargs) print('después')? De lo contrario: ret?=?func(*args,**kwargs)#paso ?10?Ejecutar la función original print('123')?#paso?12 retorno?ret?#paso?13 retorno?interior#paso?7 retorno?envoltorio?#paso?