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

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

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

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

      目錄 | 上一節(jié) (3.5 主模塊) | 下一節(jié) (4 類)

      3.6 設(shè)計討論

      本節(jié),我們重新考慮之前所做的設(shè)計決策。

      文件名與可迭代對象

      考慮以下兩個返回相同輸出的程序。

      # Provide a filename
      def read_data(filename):
          records = []
          with open(filename) as f:
              for line in f:
                  ...
                  records.append(r)
          return records
      
      d = read_data('file.csv')
      
      # Provide lines
      def read_data(lines):
          records = []
          for line in lines:
              ...
              records.append(r)
          return records
      
      with open('file.csv') as f:
          d = read_data(f)
      
      • 你更傾向于使用哪個函數(shù)?為什么?
      • 哪個函數(shù)更靈活?

      鴨子類型(Duck Typing)

      在計算機程序設(shè)計中,鴨子類型 用于確定一個對象是否可用于特定目的。這是 鴨子測試 的一種應(yīng)用。

      如果它看起來像鴨子、游泳像鴨子、叫聲像鴨子,那么它可能就是只鴨子。

      上述第二個 read_data() 函數(shù)接受任何可迭代對象,而不僅是文件行。

      def read_data(lines):
          records = []
          for line in lines:
              ...
              records.append(r)
          return records
      

      這意味著我們可以使用它處理其它的行(lines)

      # A CSV file
      lines = open('data.csv')
      data = read_data(lines)
      
      # A zipped file
      lines = gzip.open('data.csv.gz','rt')
      data = read_data(lines)
      
      # The Standard Input
      lines = sys.stdin
      data = read_data(lines)
      
      # A list of strings
      lines = ['ACME,50,91.1','IBM,75,123.45', ... ]
      data = read_data(lines)
      

      這種設(shè)計具有很大的靈活性。

      問題:我們應(yīng)該擁抱還是反對這種靈活性?

      庫設(shè)計最佳實踐

      通常,擁抱靈活性可以更好的服務(wù)于代碼庫。不要限制你的選擇,靈活性大,帶來的威力也大。

      練習

      練習 3.17:從文件名到類文件對象

      現(xiàn)在,你已經(jīng)創(chuàng)建了一個包含 parse_csv() 函數(shù)的 fileparse.py 文件。parse_csv() 函數(shù)像下面這樣工作:

      >>> import fileparse
      >>> portfolio = fileparse.parse_csv('Data/portfolio.csv', types=[str,int,float])
      >>>
      

      雖然函數(shù)接受的是一個文件名,但是,你可以使代碼更具靈活性。請求修改函數(shù),以便它可以接受任何類文件或者可迭代對象。例如:

      >>> import fileparse
      >>> import gzip
      >>> with gzip.open('Data/portfolio.csv.gz', 'rt') as file:
      ...      port = fileparse.parse_csv(file, types=[str,int,float])
      ...
      >>> lines = ['name,shares,price', 'AA,100,34.23', 'IBM,50,91.1', 'HPE,75,45.1']
      >>> port = fileparse.parse_csv(lines, types=[str,int,float])
      >>>
      

      在新的代碼中,如果像以前一樣傳遞一個文件名會發(fā)生什么?

      >>> port = fileparse.parse_csv('Data/portfolio.csv', types=[str,int,float])
      >>> port
      ... look at output (it should be crazy) ...
      >>>
      

      正如上面代碼顯示的那樣,這可能帶來意想不到的結(jié)果,所以,修改的時候需要小心一些。你可以添加安全檢查來避免這種情況嗎?

      練習 3.18:修復(fix)現(xiàn)有函數(shù)

      請修復 report.py 文件中的 read_portfolio()read_prices() 函數(shù)。以便它們可以使用修改后的 parse_csv() 函數(shù)。這應(yīng)該只涉及較小的修改。之后,report.pypcost.py 程序應(yīng)能夠像以往一樣工作。

      目錄 | 上一節(jié) (3.5 主模塊) | 下一節(jié) (4 類)

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

      posted @ 2021-03-05 19:27  codists  閱讀(119)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲中文久久久精品无码| 亚洲精品免费一二三区| 久久久久青草线综合超碰| 国语精品自产拍在线观看网站| 亚洲国产精品男人的天堂| 精品无码久久久久久尤物 | 最近免费中文字幕大全| 日本丰满少妇裸体自慰| 国产精品国产三级国产午| 德化县| 骚虎三级在线免费播放| 国产99青青成人A在线| 日本边添边摸边做边爱喷水| 亚洲免费人成网站在线观看| 国产精品久久久久AV福利动漫| 国产精品沙发午睡系列990531| 国产尤物精品自在拍视频首页 | 视频一区二区三区四区不卡| 国产亚洲精品第一综合另类| 4480yy亚洲午夜私人影院剧情| 国产粉嫩区一区二区三区| 日本一道本高清一区二区 | 国产精品亚洲二区在线播放| 午夜福利免费区在线观看| 无码专区一va亚洲v专区在线| av无码精品一区二区乱子| 永久黄网站色视频免费直播| 久久www免费人成看片中文| 自拍偷拍视频一区二区三区| 99久久国产精品无码| 欧美老少配性行为| 精品国产迷系列在线观看| 狠狠综合久久av一区二| 人妻系列中文字幕精品| 男女扒开双腿猛进入爽爽免费看| 精品无码av无码专区| 日本道播放一区二区三区| 精品999日本久久久影院| 精品少妇av蜜臀av| 亚洲日本va午夜中文字幕久久| 永久免费无码国产|