<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          這10個Python性能調(diào)優(yōu)的小技巧,你知道幾個?

          共 693字,需瀏覽 2分鐘

           ·

          2021-11-20 10:45



          你好,我是 zhenguo

          這是我的第479篇原創(chuàng),這篇文章關(guān)于Python性能調(diào)優(yōu)的10個小技巧,每天花5-10分鐘閱讀我的文章,對你技術(shù)提升一定會有幫助

          1 多多使用列表生成式

          替換下面代碼:

          cube_numbers?=?[]
          ??for?n?in?range(0,10):
          ????if?n?%?2?==?1:
          ??????cube_numbers.append(n**3)

          為列表生成式寫法:

          cube_numbers?=?[n**3?for?n?in?range(1,10)?if?n%2?==?1]

          2 內(nèi)置函數(shù)

          盡可能多使用下面這些內(nèi)置函數(shù):

          3 盡可能使用生成器

          單機處理較大數(shù)據(jù)量時,生成器往往很有用,因為它是分小片逐次讀取,最大程度節(jié)省內(nèi)存,如下網(wǎng)頁爬取時使用yield

          import?requests
          import?re

          def?get_pages(link):
          ??pages_to_visit?=?[]
          ??pages_to_visit.append(link)
          ??pattern?=?re.compile('https?')
          ??while?pages_to_visit:
          ????current_page?=?pages_to_visit.pop(0)
          ????page?=?requests.get(current_page)
          ????for?url?in?re.findall('',?str(page.content)):
          ??????if?url[0]?==?'/':
          ????????url?=?current_page?+?url[1:]
          ??????if?pattern.match(url):
          ????????pages_to_visit.append(url)
          ????#?yield
          ????yield?current_page
          webpage?=?get_pages('http://www.example.com')
          for?result?in?webpage:
          ??print(result)

          4 判斷成員所屬關(guān)系最快的方法使用 in

          for?name?in?member_list:
          ??print('{}?is?a?member'.format(name))

          5 使用集合求交集

          替換下面代碼:

          a?=?[1,2,3,4,5]
          b?=?[2,3,4,5,6]

          overlaps?=?[]
          for?x?in?a:
          ??for?y?in?b:
          ????if?x==y:
          ??????overlaps.append(x)

          print(overlaps)

          修改為set和求交集:

          a?=?[1,2,3,4,5]
          b?=?[2,3,4,5,6]

          overlaps?=?set(a)?&?set(b)

          print(overlaps)

          6 多重賦值

          Python支持多重賦值的風格,要多多使用

          first_name,?last_name,?city?=?"Kevin",?"Cunningham",?"Brighton"

          7 盡量少用全局變量

          Python查找最快、效率最高的是局部變量,查找全局變量相對變慢很多,因此多用局部變量,少用全局變量。

          8 高效的itertools模塊

          itertools模塊支持多個迭代器的操作,提供最節(jié)省內(nèi)存的寫法,因此要多多使用,如下求三個元素的全排列:

          import?itertools
          iter?=?itertools.permutations(["Alice",?"Bob",?"Carol"])
          list(iter)

          9 lru_cache 緩存

          位于functools模塊的lru_cache裝飾器提供了緩存功能,如下結(jié)合它和遞歸求解斐波那契數(shù)列第n:

          import?functools

          @functools.lru_cache(maxsize=128)
          def?fibonacci(n):
          ??if?n?==?0:
          ????return?0
          ??elif?n?==?1:
          ????return?1
          ??return?fibonacci(n?-?1)?+?fibonacci(n-2)

          因此,下面的遞歸寫法非常低效,存在重復求解多個子問題的情況:

          def fibonacci(n):
          if n == 0: # There is no 0'th number
          return 0
          elif n == 1: # We define the first number as 1
          return 1
          return fibonacci(n - 1) + fibonacci(n-2)

          10 內(nèi)置函數(shù)、key和itemgetter

          上面提到盡量多使用內(nèi)置函數(shù),如下對列表排序使用keyoperator.itemgetter

          import?operator
          my_list?=?[("Josh",?"Grobin",?"Singer"),?("Marco",?"Polo",?"General"),?("Ada",?"Lovelace",?"Scientist")]
          my_list.sort(key=operator.itemgetter(0))
          my_list




          zhenguo原創(chuàng)精華PDF,傾情奉獻給你,后臺回復對應關(guān)鍵詞下載,給文章點個贊:

          Python專題?|?數(shù)據(jù)分析手冊?|?算法刷題100



          關(guān)注我,從零學Python

          瀏覽 35
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  一级国产片 | henhengan | 成人黄频 | 色五月婷婷小说 | 黄色一级免费看 |