我从这段代码得到的是,在python中打印是write
stdout
方法的包装函数所以如果我给它一个返回类型它也必须返回它,对吧?那为什么我不能那样做呢?
import sys
class CustomPrint():
def __init__(self):
self.old_stdout=sys.stdout
def write(self, text):
text = text.rstrip()
if len(text) == 0: return
self.old_stdout.write('custom Print--->' + text + '\n')
return text
sys.stdout=CustomPrint()
print "ab" //works
a=print "ab" //error! but why?
答案 0 :(得分:3)
在python2.x中,print
是语句。因此,a = print "ab"
是非法语法。试试print "ab"
。
在python3中,print
是函数 - 所以你要写:a = print("ab")
。请注意,从python2.6开始,您可以通过print
访问python3的from __future__ import print_function
函数。
最终,你想要的是:
#Need this to use `print` as a function name.
from __future__ import print_function
import sys
class CustomPrint(object):
def __init__(self):
self._stdout = sys.stdout
def write(self,text):
text = text.rstrip()
if text:
self._stdout.write('custom Print--->{0}\n'.format(text))
return text
__call__ = write
print = CustomPrint()
a = print("ab")