Original title:
"Help me understand this weird Python idiom? sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
"
I use this idiom all the time to print a bunch of content to standard out in utf-8 in Python 2.*:
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
But to be honest, I have no idea what the (sys.stdout)
is doing. It sort of reminds me of a Javascript closure or something. But I don't know how to look up this idiom in the Python docs.
Can any of you fine folks explain what's going on here? Thanks!
.getwriter
returns a functioncallable object; you are merely calling it in the same line.
Example:
def returnFunction():
def myFunction():
print('hello!')
return myFunction
Demo:
>>> returnFunction()()
hello!
You could have alternatively done:
>>> result = returnFunction()
>>> result()
hello!
Visualization:
evaluation step 0: returnSomeFunction()()
evaluation step 1: |<-somefunction>-->|()
evaluation step 2: |<----result-------->|
codecs.getwriter('utf-8')
returns a class with StreamWriter
behaviour and whose objects can be initialized with a stream.
>>> codecs.getwriter('utf-8')
<class encodings.utf_8.StreamWriter at 0x1004b28f0>
Thus, you are doing something similar to:
sys.stdout = StreamWriter(sys.stdout)