双括号在函数调用中意味着什么?例如func(stuff)(东西)?

19 python unicode stdout codec

原标题:

" 帮我理解这个奇怪的Python成语?sys.stdout = codecs.getwriter('utf-8')(sys.stdout) "

我一直用这个成语在Python 2的utf-8中打印出一堆标准的内容.*:

sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
Run Code Online (Sandbox Code Playgroud)

但说实话,我不知道(sys.stdout)它在做什么.它让我想起了一个Javascript闭包或其他东西.但我不知道如何在Python文档中查找这个习语.

你们这些优秀的人可以解释一下这里发生了什么吗?谢谢!

nin*_*cko 29

.getwriter返回一个函数可调用对象; 你只是在同一行中调用它.

例:

def returnFunction():
    def myFunction():
        print('hello!')
    return myFunction
Run Code Online (Sandbox Code Playgroud)

演示:

>>> returnFunction()()
hello!
Run Code Online (Sandbox Code Playgroud)

你可以选择做:

>>> result = returnFunction()
>>> result()
hello!
Run Code Online (Sandbox Code Playgroud)

可视化:

evaluation step 0: returnSomeFunction()()
evaluation step 1: |<-somefunction>-->|()
evaluation step 2: |<----result-------->|
Run Code Online (Sandbox Code Playgroud)


Tug*_*tes 5

codecs.getwriter('utf-8')返回具有StreamWriter行为的类,并且可以使用流初始化其对象。

>>> codecs.getwriter('utf-8')
<class encodings.utf_8.StreamWriter at 0x1004b28f0>
Run Code Online (Sandbox Code Playgroud)

因此,您正在执行类似以下操作:

sys.stdout = StreamWriter(sys.stdout)
Run Code Online (Sandbox Code Playgroud)