<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      翻譯:《實用的Python編程》03_05_Main_module

      目錄 | 上一節 (3.4 模塊) | 下一節 (3.6 設計討論)

      3.5 主模塊

      本節介紹主程序(主模塊)的概念

      主函數

      在許多編程語言中,存在一個主函數或者主方法的概念。

      // c / c++
      int main(int argc, char *argv[]) {
          ...
      }
      
      // java
      class myprog {
          public static void main(String args[]) {
              ...
          }
      }
      

      這是啟動應用程序時執行的第一個函數。

      Python 主模塊

      Python 沒有主函數(main function)或主方法(main method)。相反,Python 有一個主模塊(main
      module)。主模塊是第一個運行的源文件。

      bash % python3 prog.py
      ...
      

      在應用程序啟動時,提供給解釋器的任何文件都將成為主模塊。名字并不重要。

      __main__ 檢查

      對于作為主腳本運行的模塊,使用此約定(譯注:__main__ 檢查)是標準做法。

      # prog.py
      ...
      if __name__ == '__main__':
          # Running as the main program ...
          statements
          ...
      

      if 里面的語句稱為主程序( main program)。

      主程序與庫導入

      任何 Python 文件都可以作為主程序運行,或者作為一個庫(譯注:library,在 Python 中 library 既可以指模塊 module,也可以指包 package),導入后運行。

      bash % python3 prog.py # Running as main
      
      import prog   # Running as library import
      

      在這兩種情況下,__name__ 都是模塊的名稱(譯注:prog)。然而,如果作為主程序運行,__name__ 只能被設置為 __main__

      通常,我們不希望主程序中的語句在庫導入的時候執行。所以,通常在代碼中包含一個 if- 檢查,判斷當前文件是否是主程序(譯注:如果當前程序不是主程序,則 if __name__ == '__main__': 里面的語句不執行)。

      if __name__ == '__main__':
          # Does not execute if loaded with import ...
      

      程序模板

      這里有一個用于編寫 Python 程序的通用模板:

      # prog.py
      # Import statements (libraries)
      import modules
      
      # Functions
      def spam():
          ...
      
      def blah():
          ...
      
      # Main function
      def main():
          ...
      
      if __name__ == '__main__':
          main()
      

      命令行工具

      Python 通常在命令行工具中使用:

      bash % python3 report.py portfolio.csv prices.csv
      

      這意味著腳本在 shell 或者 終端(terminal)執行。通常用于自動化,后臺任務等。

      命令行參數

      命令行參數是一個文本字符串列表。

      bash % python3 report.py portfolio.csv prices.csv
      

      該文本字符串列表可以在 sys.argv 中找到。

      # In the previous bash command
      sys.argv # ['report.py, 'portfolio.csv', 'prices.csv']
      

      這里有一個處理參數的簡單示例:

      import sys
      
      if len(sys.argv) != 3:
          raise SystemExit(f'Usage: {sys.argv[0]} ' 'portfile pricefile')
      portfile = sys.argv[1]
      pricefile = sys.argv[2]
      ...
      

      標準 I/O

      標準輸入/輸出(或者stdio)是和普通文件使用相同工作方式的文件。

      sys.stdout
      sys.stderr
      sys.stdin
      

      默認情況下,打印定向到 sys.stdout 文件。輸入是從 sys.stdin 文件讀取。回溯和錯誤定向到 sys.stderr 文件。

      請注意,標準輸入/輸出(stdio)可以連接到終端(terminals),文件(files),管道(pipes)等。

      bash % python3 prog.py > results.txt
      # or
      bash % cmd1 | python3 prog.py | cmd2
      

      環境變量

      環境變量在 shell 中設置。

      bash % setenv NAME dave
      bash % setenv RSH ssh
      bash % python3 prog.py
      

      os.environ 是包含這些值的字典。

      import os
      
      name = os.environ['NAME'] # 'dave'
      

      更改會反映在程序隨后啟動的任何子進程中。

      程序退出

      通過異常處理程序退出。

      raise SystemExit
      raise SystemExit(exitcode)
      raise SystemExit('Informative message')
      

      其它方式。

      import sys
      sys.exit(exitcode)
      

      非零(non-zero )退出碼表示錯誤。

      #!

      在 Unix 系統中,#! 行指定某個路徑下的 Python 解釋器來執行該腳本(譯注:#! 稱為 Shebang 或者 hashbang,因為 # 號通常稱為 hash 或者 sharp,而 ! 號則常常稱為 bang)。將以下內容添加到腳本文件的第一行。

      #!/usr/bin/env python3
      # prog.py
      ...
      

      (譯注:#!/usr/bin/env python3 的意思——到 Unix 系統 env 所包含的全部環境變量中尋找 Python3 解釋器,并使用 Python3 解釋器執行該腳本)

      執行腳本需要腳本具有可執行權限。

      bash % chmod +x prog.py
      # Then you can execute
      bash % prog.py
      ... output ...
      

      注意:Windows 系統上的 Python 啟動器也會尋找 #! 行以指示語言版本。

      腳本模板

      最后,這里有一個通用代碼模板,用于將 Python 程序作為命令行腳本運行:

      #!/usr/bin/env python3
      # prog.py
      
      # Import statements (libraries)
      import modules
      
      # Functions
      def spam():
          ...
      
      def blah():
          ...
      
      # Main function
      def main(argv):
          # Parse command line args, environment, etc.
          ...
      
      if __name__ == '__main__':
          import sys
          main(sys.argv)
      

      練習

      練習 3.15:main() 函數

      report.py 文件中添加一個 main() 函數,該函數接受命令行選項列表,并生成與以前相同的輸出。修改后,應該能夠像下面這樣交互地運行它:

      >>> import report
      >>> report.main(['report.py', 'Data/portfolio.csv', 'Data/prices.csv'])
            Name     Shares      Price     Change
      ---------- ---------- ---------- ----------
              AA        100       9.22     -22.98
             IBM         50     106.28      15.18
             CAT        150      35.46     -47.98
            MSFT        200      20.89     -30.34
              GE         95      13.48     -26.89
            MSFT         50      20.89     -44.21
             IBM        100     106.28      35.84
      >>>
      

      請修改 pcost.py 文件,添加一個類似的 main() 函數。

      >>> import pcost
      >>> pcost.main(['pcost.py', 'Data/portfolio.csv'])
      Total cost: 44671.15
      >>>
      

      練習 3.16:編寫腳本

      請修改 report.pypcost.py 程序,以便它們在命令行上可以作為腳本執行:

      bash $ python3 report.py Data/portfolio.csv Data/prices.csv
            Name     Shares      Price     Change
      ---------- ---------- ---------- ----------
              AA        100       9.22     -22.98
             IBM         50     106.28      15.18
             CAT        150      35.46     -47.98
            MSFT        200      20.89     -30.34
              GE         95      13.48     -26.89
            MSFT         50      20.89     -44.21
             IBM        100     106.28      35.84
      
      bash $ python3 pcost.py Data/portfolio.csv
      Total cost: 44671.15
      

      目錄 | 上一節 (3.4 模塊) | 下一節 (3.6 設計討論)

      注:完整翻譯見 https://github.com/codists/practical-python-zh

      posted @ 2021-03-04 23:57  codists  閱讀(342)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 97色成人综合网站| 国产精品v欧美精品∨日韩| 奶头好大揉着好爽视频| 国产成人免费午夜在线观看| 免费久久人人爽人人爽AV| 亚洲av激情五月性综合| 乱女伦露脸对白在线播放| 自拍偷在线精品自拍偷99| 人人爽人人爽人人爽| 亚洲全乱码精品一区二区| 国内精品免费久久久久电影院97| 猫咪www免费人成网站| 亚洲老妇女亚洲老熟女久| 高清中文字幕国产精品| 久久综合给合久久狠狠狠 | 激情综合色区网激情五月| 视频一区视频二区制服丝袜| 久久婷婷综合色丁香五月| 不卡免费一区二区日韩av| 日韩激情一区二区三区| 大地资源网中文第五页| 国产成人无码av大片大片在线观看| 免费十八禁一区二区三区| 少妇久久久久久久久久| 国内女人喷潮完整视频| 亚洲av日韩在线资源| 国产精品色内内在线播放| 国产亚洲国产精品二区| 国产口爆吞精在线视频2020版| 亚洲国产精品人人做人人爱| 国产乱码日韩精品一区二区| 国产一二三区在线| 亚洲中文无码手机永久| 最新偷拍一区二区三区| 欧美人与性动交ccoo| 亚洲国产成人无码电影| 免费人成视频在线视频电影| 人成午夜免费大片| 大冶市| 国产高清视频一区二区乱| 国产乱国产乱老熟300部视频 |