python - procedimientos - ¿Qué significa doble paréntesis en una llamada a función? por ejemplo, func(cosas)(cosas)?
lista de funciones de python (2)
Titulo original:
" Ayúdame a entender esta extraña expresión de Python?
sys.stdout = codecs.getwriter(''utf-8'')(sys.stdout)
"
Utilizo este idioma todo el tiempo para imprimir un montón de contenido para estandarizar en utf-8 en Python 2. *:
sys.stdout = codecs.getwriter(''utf-8'')(sys.stdout)
Pero para ser honesto, no tengo idea de lo que está haciendo (sys.stdout)
. En cierto modo, me recuerda a un cierre de Javascript o algo así. Pero no sé cómo buscar este idioma en los documentos de Python.
¿Puede alguno de ustedes, señor, explicar qué está pasando aquí? ¡Gracias!
.getwriter
devuelve un objeto invocable a la función ; simplemente lo estás llamando en la misma línea.
Ejemplo:
def returnFunction():
def myFunction():
print(''hello!'')
return myFunction
Manifestación:
>>> returnFunction()()
hello!
Usted podría haber hecho alternativamente:
>>> result = returnFunction()
>>> result()
hello!
Visualización:
evaluation step 0: returnSomeFunction()()
evaluation step 1: |<-somefunction>-->|()
evaluation step 2: |<----result-------->|
codecs.getwriter(''utf-8'')
devuelve una clase con comportamiento StreamWriter
y cuyos objetos se pueden inicializar con una secuencia.
>>> codecs.getwriter(''utf-8'')
<class encodings.utf_8.StreamWriter at 0x1004b28f0>
Por lo tanto, estás haciendo algo similar a:
sys.stdout = StreamWriter(sys.stdout)