函数调用中的双括号是什么意思?例如func(stuff)(stuff)?

|   原始标题:      \“帮助我了解这个奇怪的Python习惯用法吗?
sys.stdout = codecs.getwriter(\'utf-8\')(sys.stdout)
\” 我一直使用这个惯用法来打印一堆内容,以Python 2 *中的utf-8标准输出:
sys.stdout = codecs.getwriter(\'utf-8\')(sys.stdout)
但是说实话,我不知道2 doing在做什么。这让我想起了Java闭包之类的东西。但是我不知道如何在Python文档中查找这个习惯用法。 你们中的任何一个人都可以解释这里发生了什么吗?谢谢!     
已邀请:
        “ 3”返回一个可函数调用的对象;您只是在同一行中调用它。 例:
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-------->|
    
        
codecs.getwriter(\'utf-8\')
返回具有
StreamWriter
行为的类,并且可以使用流初始化其对象。
>>> codecs.getwriter(\'utf-8\')
<class encodings.utf_8.StreamWriter at 0x1004b28f0>
因此,您正在执行类似以下操作:
sys.stdout = StreamWriter(sys.stdout)
    
        使用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)
    

要回复问题请先登录注册