91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在python中將sys.stdout作為默認函數參數

發布時間:2021-04-16 17:41:34 來源:億速云 閱讀:217 作者:Leah 欄目:開發技術

本篇文章為大家展示了怎么在python中將sys.stdout作為默認函數參數,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

虛擬函數:

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在定義時評估了函數的默認參數,將sys.stdout設置為默認參數是安全的,還是會產生意想不到的副作用?

最佳答案

我想到的一個問題是,您有時有時想自己將sys.stdout重定向到文件(或管道,設備等).

例如,您的主程序可能如下所示:

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),這可能會很有用.現在,由于您設置了sys.stdout,因此您的writeline方法將不會注意到該修改.

因此,我認為寫這樣更安全:

def writeline(text, stream = None):
 if stream is None:
  stream = sys.stdout
 stream.write(text + '
')

通常,最好將不可變對象設置為默認參數(例如None,False,(1)等).只有在極少數情況下,Python中才會使用不可變的變量(或可能更改引用的變量).

但是,如果您確定不會將sys.stdout重定向到文件,管道等,則是安全的.

補充拓展:Python 實現將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)

上述內容就是怎么在python中將sys.stdout作為默認函數參數,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

元江| 西峡县| 芜湖市| 丹东市| 阜阳市| 永和县| 汶川县| 梓潼县| 绩溪县| 乐亭县| 阳西县| 高淳县| 大关县| 法库县| 清新县| 会东县| 天祝| 百色市| 略阳县| 芮城县| 临海市| 象山县| 蓬莱市| 邳州市| 阿拉善右旗| 元氏县| 孟连| 城固县| 禹州市| 砀山县| 河北省| 聂拉木县| 大连市| 达州市| 桦南县| 凤城市| 梅州市| 鲁山县| 吴桥县| 封丘县| 阳朔县|