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 回答
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)
于 2019-04-30T11:44:51.830 回答