原标题:
“帮助我理解这个奇怪的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文档中查找这个习语。
你们这些优秀的人可以解释一下这里发生了什么吗?谢谢!
.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)