Dapatkan kod dahulu
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'
Masalah: Seperti yang saya tulis dalam ulasan, output sys.stdout yang diubah hala tidak dilaksanakan apabila memanggil TestWriter.write(), tetapi cetakan seterusnya membuktikan bahawa output standard telah diubah hala ke objek fail f.
Apabila menjejaki titik putus, self.stream juga dipaparkan sebagai objek f
Selesai! ! !
Apabila Python mencipta setiap fungsi, setiap parameter akan terikat, dan nilai lalai tidak akan dimuatkan semula apabila nilai berubah
Tetapi jika parameter lalai parameter pengikat terikat pada alamat, ia adalah berbeza Alamat tetap tidak berubah, tetapi kandungannya boleh berubah.
http://stackoverflow.com/ques...
python mentafsir setiap pernyataan secara berurutan, jadi
TestWriter
的构造器参数stdout
tidak diubah hala.Di atas semua adalah tekaan saya
================================================ === =====================
Larikan keputusan