Python 2.7 stdout重定向的疑问
澳门威尼斯人返利
澳门威尼斯人返利
当前位置 : 澳门威尼斯人返利 > 澳门威尼斯人官网

Python 2.7 stdout重定向的疑问

先上代码

import sys


class TestWriterobject:
    def __init__self, stream=sys.stdout:
        superTestWriter, self.__init__
        self.stream = stream

    def writeself, line:
        self.stream.writeline

tmp = sys.stdout
f = opend:\\stdout.txt, w
try:
    sys.stdout = f
    adpt = TestWriter //如果这里我把f当参数传入,则执行结果如预期。
    adpt.writeasdfwe  // 预期字符串写入文本,单事实上字符串输出到了屏幕。
    print this is import from print //如预期的输入到了文本
except Exception, e:
    sys.stdout = tmp
    print e
finally:
    sys.stdout = tmp
    f.close
print finish

问题:就如我注释里写的,调用TestWriter.write的时候没有实现sys.stdout的重定向输出,但之后的print证明了标准输出已经重定向到了文件f对象。
断点跟踪的时候,self.stream也显示为f对象
求解惑!!!

def __init__self, stream=sys.stdout

Python在创建每个函数时,每个参数都会被绑定,默认值不会随着值的改变而重新加载

# coding: utf-8

D = 2 
class Test:
    def __init__self, a=D:
        print a


if __name__ == __main__:
    D = 3 
    t = Test
    print D

inner function:  2
outer function: 3

但如果绑定参数默认参数绑定的是地址,那就不一样,地址不变,内容可以变.

# coding: utf-8

D = [3] 
class Test:
    def __init__self, a=D:
        print "inner function: ", a


if __name__ == __main__:
    D[0] = 2
    t = Test
    print "outer function:", D
   
inner function:  [2]
outer function: [2]

In contrast, in Python, execution begins at the top of one file and proceeds in a well-defined order through each statement in the file, ...

http://stackoverflow.com/ques...

python会顺序解释每条语句,所以TestWriter的构造器参数stdout没有被重定向。

以上都是我猜的

=====================================================================

import sys

class A:
    def __init__self, stream=sys.stdout:
        printstream

f = opentest.txt, w

a = A

sys.stdout = f

printsys.stdout

运行结果

广告位

澳门威尼斯人返利