我一直使用这个成语在 Python 2 中以 utf-8 标准输出一堆内容:
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
但老实说,我不知道它(sys.stdout)
在做什么。它让我想起了 Javascript 闭包之类的东西。但我不知道如何在 Python 文档中查找这个成语。
你们中的任何人都可以解释这里发生了什么吗?谢谢!
我一直使用这个成语在 Python 2 中以 utf-8 标准输出一堆内容:
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
但老实说,我不知道它(sys.stdout)
在做什么。它让我想起了 Javascript 闭包之类的东西。但我不知道如何在 Python 文档中查找这个成语。
你们中的任何人都可以解释这里发生了什么吗?谢谢!
.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-------->|
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)