22

Python 2 の utf-8 で一連のコンテンツを標準出力に出力するために、私は常にこのイディオムを使用しています。

sys.stdout = codecs.getwriter('utf-8')(sys.stdout)

しかし、正直なところ、私は彼が何をしているのかわかりません(sys.stdout)。Javascriptのクロージャーか何かを思い出させます。しかし、Python ドキュメントでこのイディオムを調べる方法がわかりません。

ここで何が起こっているのか説明できる人はいますか? ありがとう!

4

3 に答える 3

35

.getwriter関数呼び出し可能なオブジェクトを返します。同じ行でそれを呼び出しているだけです。

例:

def returnFunction():
    def myFunction():
        print('hello!')
    return myFunction

デモ:

>>> returnFunction()()
hello!

別の方法として、次のこともできます。

>>> result = returnFunction()
>>> result()
hello!

視覚化:

evaluation step 0: returnSomeFunction()()
evaluation step 1: |<-somefunction>-->|()
evaluation step 2: |<----result-------->|
于 2011-06-25T08:55:32.117 に答える
6

codecs.getwriter('utf-8')StreamWriter振る舞いを持ち、オブジェクトをストリームで初期化できるクラスを返します。

>>> codecs.getwriter('utf-8')
<class encodings.utf_8.StreamWriter at 0x1004b28f0>

したがって、あなたは次のようなことをしています:

sys.stdout = StreamWriter(sys.stdout)
于 2011-06-25T08:59:14.943 に答える