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

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

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

      翻譯:《實用的Python編程》01_07_Functions

      目錄 | 上一節 (1.6 文件) | 下一節 (2.0 處理數據)

      1.7 函數

      隨著程序開始變大,我們會想要有條理地組織這些程序。本節簡要介紹函數、庫模塊以及帶有異常的錯誤處理。

      自定義函數

      對你要重用的代碼使用函數。下面是函數的定義方式:

      def sumcount(n):
          '''
          Returns the sum of the first n integers
          '''
          total = 0
          while n > 0:
              total += n
              n -= 1
          return total
      

      函數調用:

      a = sumcount(100)
      

      函數是執行某些任務并返回結果的一系列語句。 return 關鍵字需要顯式指定函數的返回值。

      庫函數

      Python 帶有一個大型的標準庫。使用 import 訪問庫模塊。示例:

      import math
      x = math.sqrt(10)
      
      import urllib.request
      u = urllib.request.urlopen('http://www.python.org/')
      data = u.read()
      

      稍后,我們將更詳細地介紹庫和模塊。

      錯誤和異常

      函數將錯誤報告為異常。異常會導致函數中止,如果未處理,可能會導致整個程序終止。

      在你的 Python 解釋器(REPL)中嘗試一下:

      >>> int('N/A')
      Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      ValueError: invalid literal for int() with base 10: 'N/A'
      >>>
      

      出于調試的目的,上面的錯誤信息描述了發生的情況,錯誤產生的位置以及回溯。該回溯顯示導致失敗的其它函數調用。

      捕獲和處理異常

      異常可以被捕獲并處理。要捕獲異常,使用 try - except 語句:

      for line in f:
          fields = line.split()
          try:
              shares = int(fields[1])
          except ValueError:
              print("Couldn't parse", line)
          ...
      

      該名稱 ValueError 必須與你嘗試捕獲的錯誤類型匹配。

      通常,根據所執行的操作,很難提前確切地知道可能會發生哪種錯誤。不管是好是壞,通常會添加在程序意外奔潰后的異常處理(示例:”天哪,我們忘記捕獲錯誤了。我們應該處理錯誤的。“)。

      觸發異常

      要觸發異常,請使用 raise 語句:

      raise RuntimeError('What a kerfuffle')
      

      這將導致程序因異常回溯而中止,除非該異常通過 try-except 代碼塊捕獲。

      % python3 foo.py
      Traceback (most recent call last):
        File "foo.py", line 21, in <module>
          raise RuntimeError("What a kerfuffle")
      RuntimeError: What a kerfuffle
      

      練習

      練習 1.29:定義一個函數

      嘗試定義一個簡單的函數:

      >>> def greeting(name):
              'Issues a greeting'
              print('Hello', name)
      
      >>> greeting('Guido')
      Hello Guido
      >>> greeting('Paula')
      Hello Paula
      >>>
      

      如果函數的第一條語句是字符串,那么它被當做文檔字符串。嘗試輸入一個命令來顯示該文檔字符串,例如 help(greeting)

      練習 1.30:將腳本轉換為函數

      把你在 練習1.27pcost.py 程序編寫的代碼放到 portfolio_cost(filename) 函數里面。此函數以文件名作為輸入,讀取文件中的投資組合數據,把投資組合總的費用作為浮點數返回。

      要使用你的函數,請修改程序,使其看起來像下面這樣:

      def portfolio_cost(filename):
          ...
          # Your code here
          ...
      
      cost = portfolio_cost('Data/portfolio.csv')
      print('Total cost:', cost)
      

      運行程序時,你應該會看到和以前一樣的輸出。運行程序后,你也可以輸入一下命令來交互式地調用函數:

      bash $ python3 -i pcost.py
      

      這將允許你從交互模式調用函數:

      >>> portfolio_cost('Data/portfolio.csv')
      44671.15
      >>>
      

      能夠交互地試驗代碼對調試和測試非常有用。

      練習 1.31:錯誤處理

      如果你在缺少某些字段的文件上使用函數,會發生什么情況?

      >>> portfolio_cost('Data/missing.csv')
      Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
          File "pcost.py", line 11, in portfolio_cost
          nshares    = int(fields[1])
      ValueError: invalid literal for int() with base 10: ''
      >>>
      

      在這一點上,你面臨一個決定:要使程序正常工作,你可以通過消除錯誤行(bad lines)來清理原始輸入文件,或者修改代碼,以某種方式處理錯誤行。

      請修改 pcost.py 程序以捕獲異常,打印警告信息然后繼續處理文件余下部分。

      練習1.32:使用庫函數

      Python 帶有一個擁有大量有用函數的大型標準庫。csv 模塊是一個在這里可能有用的庫。無論何時,每當必須必須使用 CSV 數據文件時,都應使用 csv 模塊。下面是一個有關 csv 模塊是如何工作的示例:

      >>> import csv
      >>> f = open('Data/portfolio.csv')
      >>> rows = csv.reader(f)
      >>> headers = next(rows)
      >>> headers
      ['name', 'shares', 'price']
      >>> for row in rows:
              print(row)
      
      ['AA', '100', '32.20']
      ['IBM', '50', '91.10']
      ['CAT', '150', '83.44']
      ['MSFT', '200', '51.23']
      ['GE', '95', '40.37']
      ['MSFT', '50', '65.10']
      ['IBM', '100', '70.44']
      >>> f.close()
      >>>
      

      csv 模塊有一個非常棒的功能——它處理各種底層細節,例如引號和適當的逗號拆分。在上面的輸出中,你會注意到它從第一列的名稱(names)中刪除了雙引號。

      修改你的 pcost.py 程序,以使用 csv 模塊進行解析,然后嘗試運行前面的示例。

      練習 1.33:從命令行讀取

      pcost.py 程序中,輸入文件的名稱已經被硬編碼到代碼中:

      # pcost.py
      
      def portfolio_cost(filename):
          ...
          # Your code here
          ...
      
      cost = portfolio_cost('Data/portfolio.csv')
      print('Total cost:', cost)
      

      雖然用于學習和測試還行,但在實際的程序中,你可能不會這么做。

      相反,你可以把文件名作為參數傳遞給腳本。嘗試按以下步驟修改程序的底部:

      # pcost.py
      import sys
      
      def portfolio_cost(filename):
          ...
          # Your code here
          ...
      
      if len(sys.argv) == 2:
          filename = sys.argv[1]
      else:
          filename = 'Data/portfolio.csv'
      
      cost = portfolio_cost(filename)
      print('Total cost:', cost)
      

      sys.argv 是一個列表,該列表包含了在命令行上傳遞的參數(如果有)。

      要運行程序,你需要從終端(terminal)運行 Python。

      示例,從 Unix系統中的 bash 運行:

      bash % python3 pcost.py Data/portfolio.csv
      Total cost: 44671.15
      bash %
      

      目錄 | 上一節 (1.6 文件) | 下一節 (2.0 處理數據)

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

      posted @ 2021-02-19 12:35  codists  閱讀(465)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 好湿好紧太硬了我太爽了视频| 亚洲一区二区三区丝袜| 亚洲精品国产av成拍色拍个| 国产精品亚洲А∨天堂免| 久久国产欧美日韩精品图片| 中文字幕第一页亚洲精品| 国产国产午夜福利视频| 国产精品自在线拍国产手青青机版| 亚洲无人区一区二区三区| 中文字幕人妻精品在线| 69精品丰满人妻无码视频a片| 日本伊人色综合网| 亚洲欧洲一区二区三区久久| 人妻夜夜添夜夜无码av| 免费一区二三区三区蜜桃| 亚洲一区二区中文字幕| 99热精品毛片全部国产无缓冲 | 欧美和黑人xxxx猛交视频| 午夜福利偷拍国语对白| 欧美激情视频一区二区三区免费 | 亚洲国产欧美在线人成aaaa| 野外做受三级视频| av天堂午夜精品一区| 日本一区二区精品色超碰| 精品无码久久久久成人漫画| 巴彦淖尔市| 中文字幕日韩精品亚洲一区 | 亚洲激情一区二区三区视频| 人人做人人澡人人人爽| 国产欧美亚洲精品a| 亚洲欧美中文字幕日韩一区二区| 精品国产迷系列在线观看| 亚洲一区二区三区影院| 黑人av无码一区| 国语精品一区二区三区| 日韩熟女熟妇久久精品综合| 日韩精品久久久肉伦网站| 好男人日本社区www| 惠东县| 亚洲综合网一区中文字幕| 公喝错春药让我高潮|