先上程式碼
import sys
class TestWriter(object):
def __init__(self, stream=sys.stdout):
super(TestWriter, self).__init__()
self.stream = stream
def write(self, line):
self.stream.write(line)
tmp = sys.stdout
f = open('d:\stdout.txt', 'w')
try:
sys.stdout = f
adpt = TestWriter() //如果这里我把f当参数传入,则执行结果如预期。
adpt.write('asdfwe') // 预期字符串写入文本,单事实上字符串输出到了屏幕。
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物件
求解惑! ! !
###
Python在建立每個函數時,每個參數都會被綁定,預設值不會隨著值的改變而重新載入
但如果綁定參數預設參數綁定的是位址,那就不一樣,位址不變,內容可以變.
http://stackoverflow.com/ques...
python會順序解釋每個語句,所以
TestWriter
的构造器参数stdout
沒有被重定向。以上都是我猜的
================================================= ====================
運行結果