欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python-sys.stdout作為默認(rèn)函數(shù)參數(shù)的實(shí)現(xiàn)

 更新時(shí)間:2020年02月21日 16:34:06   作者:codeday  
今天小編就為大家分享一篇 python-sys.stdout作為默認(rèn)函數(shù)參數(shù)的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

假設(shè)我們有以下虛擬函數(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ù)的默認(rèn)參數(shù),將sys.stdout設(shè)置為默認(rèn)參數(shù)是安全的,還是會產(chǎn)生意想不到的副作用?

最佳答案

我想到的一個(gè)問題是,您有時(shí)有時(shí)想自己將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()

如果您希望程序在提及一個(gè)文件時(shí)將其記錄到一個(gè)文件中(例如python3 file.py logfile.log),這可能會很有用.現(xiàn)在,由于您設(shè)置了sys.stdout,因此您的writeline方法將不會注意到該修改.

因此,我認(rèn)為寫這樣更安全:

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

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

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

補(bǔ)充拓展:Python 實(shí)現(xiàn)將sys.stdout還原為默認(rèn)值

我想將輸出寫入文件,因此我做了

sys.stdout = open(outfile, 'w+')

但是后來我想在寫入文件后打印回控制臺

sys.stdout.close()
sys.stdout = None

我得到了

AttributeError: 'NoneType' object has no attribute 'write'

顯然默認(rèn)輸出流不能None,所以我對Python說:

sys.stdout = use_the_default_one()

解決方案

重新分配給sys.__stdout__。

來自文檔

在程序開始時(shí)包含stdin,stderr和stdout的原始值。它們在完成過程中使用,并且無論是否已重定向sys.std *對象,將其打印到實(shí)際的標(biāo)準(zhǔn)流都很有用。

或者你可以做

print(output, file=myoutputfile)

并避免該問題。

以上這篇 python-sys.stdout作為默認(rèn)函數(shù)參數(shù)的實(shí)現(xiàn)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python爬蟲之BeautifulSoup的基本使用教程

    Python爬蟲之BeautifulSoup的基本使用教程

    Beautiful Soup提供一些簡單的、python式的函數(shù)用來處理導(dǎo)航、搜索、修改分析樹等功,下面這篇文章主要給大家介紹了關(guān)于Python爬蟲之BeautifulSoup的基本使用教程,需要的朋友可以參考下
    2022-03-03
  • 十個(gè)Python經(jīng)典小游戲的代碼合集

    十個(gè)Python經(jīng)典小游戲的代碼合集

    這篇文章主要為大家分享十個(gè)Python經(jīng)典的小游戲代碼,非常適合Python初學(xué)者練手。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下
    2022-05-05
  • python如何提升爬蟲效率

    python如何提升爬蟲效率

    這篇文章主要介紹了python如何提升爬蟲效率,幫助大家更好的理解和使用python 爬蟲,感興趣的朋友可以參考下
    2020-09-09
  • python中執(zhí)行shell的兩種方法總結(jié)

    python中執(zhí)行shell的兩種方法總結(jié)

    這篇文章主要介紹了python中執(zhí)行shell的兩種方法,有兩種方法可以在Python中執(zhí)行SHELL程序,方法一是使用Python的commands包,方法二則是使用subprocess包,這兩個(gè)包均是Python現(xiàn)有的內(nèi)置模塊。需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • python如何將空格分隔輸入兩個(gè)數(shù)

    python如何將空格分隔輸入兩個(gè)數(shù)

    這篇文章主要介紹了python如何將空格分隔輸入兩個(gè)數(shù)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python Bamboolib庫加速Pandas數(shù)據(jù)分析過程詳解

    python Bamboolib庫加速Pandas數(shù)據(jù)分析過程詳解

    這篇文章主要介紹了python Bamboolib庫加速Pandas數(shù)據(jù)分析過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • pytorch 數(shù)據(jù)集圖片顯示方法

    pytorch 數(shù)據(jù)集圖片顯示方法

    今天小編就為大家分享一篇pytorch 數(shù)據(jù)集圖片顯示方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python 根據(jù)相鄰關(guān)系還原數(shù)組的兩種方式(單向構(gòu)造和雙向構(gòu)造)

    Python 根據(jù)相鄰關(guān)系還原數(shù)組的兩種方式(單向構(gòu)造和雙向構(gòu)造)

    本文主要介紹了Python 根據(jù)相鄰關(guān)系還原數(shù)組的兩種方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 基于python實(shí)現(xiàn)名片管理系統(tǒng)

    基于python實(shí)現(xiàn)名片管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了基于python實(shí)現(xiàn)名片管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Python實(shí)現(xiàn)求解括號匹配問題的方法

    Python實(shí)現(xiàn)求解括號匹配問題的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)求解括號匹配問題的方法,涉及Python基于棧的字符串遍歷、判斷、運(yùn)算解決括號匹配相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04

最新評論