2

我从这段代码中得到的只是,python 中的 print 是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?
4

1 回答 1

4

在 python2.x 中,print是一条语句。所以,a = print "ab"是非法的语法。试试吧print "ab"

在 python3 中,print是一个函数——所以你会写: a = print("ab"). 请注意,从 python2.6 开始,您可以print通过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")
于 2013-03-09T16:17:50.747 回答