<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>

          提高你的Python編碼效率

          共 4063字,需瀏覽 9分鐘

           ·

          2021-03-26 10:48

          前言

          我用Python編程有幾年了, 并且我仍然經(jīng)常驚訝于Python代碼可以如何的簡潔,如何的 DRY。我學(xué)到了很多小貼士和技巧,大多數(shù)來自于閱讀開源項目的源代碼,像 DjangoFlaskRequests 等。

          這里我挑出了幾個有時被大家忽略的幾條,但是它們在日常工作中會有很大幫助。

          感謝各友的鼓勵與支持??????,往期文章都在最后梳理出來了(●'?'●)

          ??????????????????????????????????????????????????????????????????

          字典和集合推導(dǎo)式

          大多數(shù)Python開發(fā)者知道使用列表推導(dǎo)式。你不熟悉這一點(diǎn)?一個列表推導(dǎo)式是一個創(chuàng)造列表的簡短方式:

          >>> some_list = [1, 2, 3, 4, 5]>>> another_list = [ x + 1 for x in some_list ]>>> another_list[23456]

          從Python 3.1開始(也反向地移植到了Python 2.7),我們可以用同樣的方式創(chuàng)建集合和字典:

          >>> # Set Comprehensions>>> some_list = [1, 2, 3, 4, 5, 2, 5, 1, 4, 8]>>> even_set = { x for x in some_list if x % 2 == 0 }>>> even_setset([8, 2, 4])
          >>> # Dict Comprehensions>>> d = { x: x % 2 == 0 for x in range(1, 11) }>>> d{1: False, 2: True, 3: False, 4: True, 5: False, 6: True, 7: False, 8: True, 9: False, 10: True}

          第一個例子中,我們用 some_list 建立了一個元素不重復(fù)的集合,但只有偶數(shù)。第二個字典的例子中展示了一個字典的創(chuàng)建,這個字典的鍵是1到10(包括10),值是布爾值,指明該鍵是不是一個偶數(shù)。

          另一個值得注意的地方是集合的文法,我們可以這么簡單的創(chuàng)建一個集合:

          >>> my_set = {1, 2, 1, 2, 3, 4}>>> my_setset([1234])

          而沒有使用到內(nèi)建的 set 方法



          使用計數(shù)器對象計數(shù)

          很明顯,但很容易遺忘。計數(shù)是一個尋常不過的編程任務(wù),而且大多數(shù)情形下這不是個難事。不過計數(shù)可以更簡單。

          Python的 collections 庫包含一個 dict 的子類,專門解決計數(shù)任務(wù):

          >>> from collections import Counter>>> c = Counter('hello world')>>> cCounter({'l': 3, 'o': 2, ' ': 1, 'e': 1, 'd': 1, 'h': 1, 'r': 1, 'w': 1})>>> c.most_common(2)[('l'3), ('o'2)]

          漂亮地打印JSON

          JSON是一個很棒的序列格式,如今廣泛應(yīng)用在API和web服務(wù)中,但是很難用裸眼來看大數(shù)據(jù)量的JSON,它們很長,還在一行里。

          可以用參數(shù) indent 來更好地打印JSON數(shù)據(jù),這在跟 REPL或是日志打交道的時候很有用??

          >>> import json>>> print(json.dumps(data))  # No indention{"status": "OK", "count": 2, "results": [{"age": 27, "name": "Oz", "lactose_intolerant": true}, {"age": 29, "name": "Joe", "lactose_intolerant": false}]}>>> print(json.dumps(data, indent=2))  # With indention{  "status": "OK",  "count": 2,  "results": [    {      "age": 27,      "name": "Oz",      "lactose_intolerant": true    },    {      "age": 29,      "name": "Joe",      "lactose_intolerant": false    }  ]}

          另外,去看看內(nèi)建模塊 pprint , 它可以幫助你漂亮地輸出其它的東西。


          快速建立一個web服務(wù)

          有時我們需要一個建立RPC服務(wù)簡單而快速的方法。我們需要的只是讓程序B去調(diào)用程序A(可能在另一個機(jī)器上)的方法。

          我們不用了解關(guān)于這個的任何技術(shù),但是我們只是需要這么個簡單的東西,我們可以使用一個叫做 XML-RPC 的協(xié)議(對應(yīng)的Python庫實現(xiàn) SimpleXMLRPCServer )來處理這種事。

          這里是一個簡單粗糙的文件閱讀服務(wù)器??

          from SimpleXMLRPCServer import SimpleXMLRPCServer
          def file_reader(file_name): with open(file_name, 'r') as f: return f.read()
          server = SimpleXMLRPCServer(('localhost', 8000))server.register_introspection_functions()
          server.register_function(file_reader)
          server.serve_forever()

          響應(yīng)它的客戶端??

          import xmlrpclibproxy = xmlrpclib.ServerProxy('http://localhost:8000/')proxy.file_reader('/tmp/secret.txt')

          現(xiàn)在我們就有了一個遠(yuǎn)程的文件閱讀器,除了一點(diǎn)代碼,沒有外部依賴。(當(dāng)然,不安全,所以只在"家"用這個吧)



          Python的開源社區(qū)

          剛我一直在說Python的標(biāo)準(zhǔn)庫了,這些庫只要你安裝Python就會包含在你的Python中。對于大多數(shù)的其他任務(wù),這里有大量的社區(qū)維護(hù)的第三方庫來滿足我們的需求。

          這是一個我挑選Python庫的辦法:

          • 包含一個明確的協(xié)議,以便我們使用

          • 積極活躍的開發(fā)和維護(hù)

          • 可以用 pip 來安裝,可以輕易地重復(fù)部署

          • 擁有一個合適覆蓋率的測試集

          如果你發(fā)現(xiàn)了一個適合你需求的Python庫,不要害羞,大多數(shù)開源項目歡迎我們貢獻(xiàn)代碼和協(xié)助,即使你不是一個Python老將。幫助之手隨時受歡迎!


          追加的技巧

          • 快速在一個目錄建立HTTP服務(wù)器 

          python -m SimpleHTTPServer
          • 命令行上漂亮地打印JSON

          echo '{"json":"obj"}' | python -mjson.tool

          而且,如果你安裝了 Pygments 模塊,可以高亮地打印JSON

          echo '{"json":"obj"}' | python -mjson.tool | pygmentize -l json
          • 注意 {} 是一個空的字典,而不是空的集合


          「?? 感謝大家」

          如果你覺得這篇內(nèi)容對你挺有有幫助的話:

          1. 點(diǎn)贊支持下吧,讓更多的人也能看到這篇內(nèi)容(收藏不點(diǎn)贊,都是耍流氓 -_-)
          2. 歡迎在留言區(qū)與我分享你的想法,也歡迎你在留言區(qū)記錄你的思考過程。
          3. 覺得不錯的話,也可以閱讀近期梳理的文章(感謝鼓勵與支持??????):


          老鐵,三連支持一下,好嗎?↓↓↓




          歡迎大家加入到知識星球這個大家庭,這里一定有與你志同道合的小伙伴,在這里大家可以一起交流,一起學(xué)習(xí),一同吹逼,一同玩耍。。。


          長按按鈕  “識別二維碼” 關(guān)注我
          更多精彩內(nèi)容等著你哦

          點(diǎn)分享

          點(diǎn)點(diǎn)贊

          點(diǎn)在

          瀏覽 58
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  成人黄A片免费 | www欧美在线观看 | 激情偷拍在线亚洲 | 8x8x皇冠视频免费观看 | 青娱乐亚洲精品视频在线观看 |