双括号在函数调用中是什么意思?e、 g.func(stuff)(东西)吗?

2024-04-18 02:58:56 发布

您现在位置:Python中文网/ 问答频道 /正文

Original title:

"Help me understand this weird Python idiom? sys.stdout = codecs.getwriter('utf-8')(sys.stdout)"

我一直在使用这个习惯用法在python2中用utf-8打印一堆内容作为标准输出。*:

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

但老实说,我不知道(sys.stdout)在做什么。它让我想起了Javascript闭包之类的。但是我不知道如何在Python文档中查找这个习惯用法。在

你们中有谁能解释一下这里发生了什么事吗?谢谢!在


Tags: titlestdoutsyshelpthisutfmeidiom
3条回答

使用python flexibility的双括号调用包装器函数。

示例

1- funcWrapper

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

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

2- funcWrapper

^{pr2}$

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

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

因此,您正在做类似于:

^{pr2}$

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

示例:

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

演示:

^{pr2}$

你也可以选择:

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

可视化:

evaluation step 0: returnSomeFunction()()
evaluation step 1: |<-somefunction> >|()
evaluation step 2: |<  result    >|

相关问题 更多 >