本篇文章為大家展示了怎么在python中將sys.stdout作為默認函數(shù)參數(shù),內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
虛擬函數(shù):
import sys def writeline(text, stream=sys.stdout): stream.write(text + ' ') with open('/path/to/file', 'w') as f: # writes to /path/to/file writeline('foo', f) # writes to standard output writeline('bar')
鑒于Python在定義時評估了函數(shù)的默認參數(shù),將sys.stdout設(shè)置為默認參數(shù)是安全的,還是會產(chǎn)生意想不到的副作用?
最佳答案
我想到的一個問題是,您有時有時想自己將sys.stdout重定向到文件(或管道,設(shè)備等).
例如,您的主程序可能如下所示:
if __name__ == '__main__': if len(sys.argv) > 1: sys.stdout = open(sys.argv[1],'w') try: # ... run the program finally: if len(sys.argv) > 1: sys.stdout.close()
如果您希望程序在提及一個文件時將其記錄到一個文件中(例如python3 file.py logfile.log),這可能會很有用.現(xiàn)在,由于您設(shè)置了sys.stdout,因此您的writeline方法將不會注意到該修改.
因此,我認為寫這樣更安全:
def writeline(text, stream = None): if stream is None: stream = sys.stdout stream.write(text + ' ')
通常,最好將不可變對象設(shè)置為默認參數(shù)(例如None,False,(1)等).只有在極少數(shù)情況下,Python中才會使用不可變的變量(或可能更改引用的變量).
但是,如果您確定不會將sys.stdout重定向到文件,管道等,則是安全的.
補充拓展:Python 實現(xiàn)將sys.stdout還原為默認值
我想將輸出寫入文件,因此我做了
sys.stdout = open(outfile, 'w+')
但是后來我想在寫入文件后打印回控制臺
sys.stdout.close()
sys.stdout = None
我得到了
AttributeError: 'NoneType' object has no attribute 'write'
顯然默認輸出流不能None,所以我對Python說:
sys.stdout = use_the_default_one()
解決方案
重新分配給sys.__stdout__。
來自文檔
在程序開始時包含stdin,stderr和stdout的原始值。它們在完成過程中使用,并且無論是否已重定向sys.std *對象,將其打印到實際的標準流都很有用。
或者你可以做
print(output, file=myoutputfile)
上述內(nèi)容就是怎么在python中將sys.stdout作為默認函數(shù)參數(shù),你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
標題名稱:怎么在python中將sys.stdout作為默認函數(shù)參數(shù)-創(chuàng)新互聯(lián)
當(dāng)前URL:http://vcdvsql.cn/article36/cccgsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、定制網(wǎng)站、手機網(wǎng)站建設(shè)、網(wǎng)站策劃、全網(wǎng)營銷推廣、網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容