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

时间:2011-06-25 08:53:27

标签: 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)

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

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

3 个答案:

答案 0 :(得分:27)

.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-------->|

答案 1 :(得分:5)

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

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

因此,您正在做类似的事情:

sys.stdout = StreamWriter(sys.stdout)

答案 2 :(得分:0)

使用python灵活性的双括号调用包装函数。

示例

  

1- funcWrapper

def funcwrapper(y):
    def abc(x):
        return x * y + 1
    return abc

result = funcwrapper(3)(5)
print(result)
  

2- funcWrapper

def xyz(z):
    return z + 1

def funcwrapper(y):
    def abc(x):
        return x * y + 1
    return abc

result = funcwrapper(3)(xyz(4))
print(result)