Obteniendo diferentes valores para el tipo Decimal en el Contexto Local.
He escrito el siguiente código para determinar el tipo
de decimal
localcontext
:
print('tipo de decimal.localcontext():', type(decimal.localcontext()))
Salida:
tipo de decimal.localcontext(): #ContextManager
Sin embargo, el siguiente código está devolviendo una salida diferente para tipo
:
with decimal.localcontext() as ctx1:
print(type(ctx1))
Salida:
Mi pregunta es por qué el segundo fragmento de código está devolviendo decimal.Context
en lugar de decimal.ContextManager
.
davy.ai
El primer fragmento de código simplemente imprime el tipo de la función
decimal.localcontext()
, que es un objetoContextManager
. Sin embargo, el segundo fragmento de código realmente crea un nuevo contexto utilizando la declaraciónwith
y devuelve un objetoContext
.El objeto
ContextManager
devuelto pordecimal.localcontext()
se utiliza para crear un nuevo contexto, y la declaraciónwith
es la que realmente crea el nuevo contexto. Cuando se ingresa la declaraciónwith
, se llama al método__enter__()
del objetoContextManager
y devuelve el nuevo objetoContext
. Por lo tanto, la funcióntype()
en el segundo fragmento de código devuelve el tipo del nuevo objetoContext
, no del objetoContextManager
.Entonces, la diferencia en la salida se debe a que el primer fragmento de código simplemente imprime el tipo del objeto
ContextManager
, mientras que el segundo fragmento de código realmente crea un nuevo contexto y devuelve el tipo de ese contexto.