Rumah > Soal Jawab > teks badan
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! ! !
巴扎黑2017-05-18 10:50:16
def __init__(self, stream=sys.stdout)
Apabila Python mencipta setiap fungsi, setiap parameter akan terikat, dan nilai lalai tidak akan dimuatkan semula apabila nilai berubah
# 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
Tetapi jika parameter lalai parameter pengikat terikat pada alamat, ia adalah berbeza Alamat tetap tidak berubah, tetapi kandungannya boleh berubah.
# 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]
阿神2017-05-18 10:50:16
Sebaliknya, dalam Python, pelaksanaan bermula di bahagian atas satu fail dan diteruskan dalam susunan yang jelas melalui setiap pernyataan dalam fail, ...
http://stackoverflow.com/ques...
python mentafsir setiap pernyataan secara berurutan, jadi TestWriter
的构造器参数stdout
tidak diubah hala.
Di atas semua adalah tekaan saya
================================================ === =====================
import sys
class A:
def __init__(self, stream=sys.stdout):
print(stream)
f = open('test.txt', 'w')
a = A()
sys.stdout = f
print(sys.stdout)
Larikan keputusan