问题描述
|
原始标题:
\“帮助我了解这个奇怪的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)