<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的奇淫技巧,你會么?

          共 6523字,需瀏覽 14分鐘

           ·

          2022-03-08 18:15

          來源:Python小二


          作者 Peter Gleeson 是一名數(shù)據(jù)科學(xué)家,日常工作幾乎離不 python。一路走來,他積累了不少有用的技巧和 tips,現(xiàn)在就將這些技巧分享給大家。這些技巧將根據(jù)其首字母按 A-Z 的順序進(jìn)行展示。

          ALL OR ANY

          Python 之所以成為這么一門受歡迎的語言一個原因是它的可讀性和表達(dá)能力非常強(qiáng)。Python 也因此經(jīng)常被調(diào)侃為“可執(zhí)行的偽代碼”。不信你看:

          x?=?[True,?True,?False]
          if?any(x):
          ????print("At?least?one?True")
          if?all(x):
          ????print("Not?one?False")
          if?any(x)?and?not?all(x):
          ????print("At?least?one?True?and?one?False")

          BASHPLOTIB

          你想要在控制臺繪圖嘛?

          $?pip?install?bashplotlib

          現(xiàn)在,你的控制臺中就可以有圖了

          COLLECTIONS

          Python 有一些很棒的默認(rèn)數(shù)據(jù)類型,但是有時候他們并不會像你所希望的那樣發(fā)揮作用。

          幸運(yùn)的是,Python 標(biāo)準(zhǔn)庫提供了 collection 模塊。它讓你可以使用更為多樣數(shù)據(jù)類型。

          from?collections?import?OrderedDict,?Counter
          #?Remembers?the?order?the?keys?are?added!
          x?=?OrderedDict(a=1,?b=2,?c=3)
          #?Counts?the?frequency?of?each?character
          y?=?Counter("Hello?World!")

          DIR

          面對一個 Python 對象,你是否曾想過可以直接看到其屬性?你也許可以試試以下的代碼:

          >>>?dir()
          >>>?dir("Hello?World")
          >>>?dir(dir)

          這是運(yùn)行 Python 的時候一個非常有用的功能,用于動態(tài)探索你所使用的對象和模塊。更多詳情,可以查看這里:https://docs.python.org/3/library/functions.html#dir

          EMOJI

          對的,你沒看錯!


          $?pip?install?emoji

          用 python 來創(chuàng)建表情包,你也可以。

          from?emoji?import?emojize
          print(emojize(":thumbs_up:"))

          ??

          FROM_FUTURE_IMPORT

          Python 非常受歡迎,這也就導(dǎo)致了它的版本更新非常快,新的版本往往會有很多新特性。你不更新,就無法使用。

          然而,不要害怕。future 模塊可以讓你導(dǎo)入未來版本的功能。有點(diǎn)像時空穿梭有木有!

          from?__future__?import?print_function
          print("Hello?World!")

          GEOPY

          對于程序猿來說地理可能是一個非常有挑戰(zhàn)性的領(lǐng)域。但是,geopy 模塊則讓它變得非常簡單。

          $?pip?install?geopy

          它通過提取一系列不同地理編碼服務(wù)的 api 來工作,讓你能夠獲得一個地方的完整街道地址、緯度、經(jīng)度,甚至海拔。

          這里面同時還包含一個有用的“距離”類別。它能使用你選定的度量去計(jì)算了兩個地點(diǎn)之間的距離。

          from?geopy?import?GoogleV3
          place?=?"221b?Baker?Street,?London"
          location?=?GoogleV3().geocode(place)
          print(location.address)
          print(location.location)

          HOWDOI

          有時候你碰到了一個編程問題,覺得自己之前明明見過它的解決方法,但是卻記不起來具體是怎么樣的了。于是你想要去 StackOverflow 上找,但又不想離開這個終端。這個時候,你需要下面這個工具——howdoi

          $?pip?install?howdoi

          你所遇到的任何問題都可以問它,它會盡他所能給你返回一個答案。

          $?howdoi?vertical?align?css
          $?howdoi?for?loop?in?java
          $?howdoi?undo?commits?in?git

          需要注意的是——它只從 StackOverflow 最頂端的答案中抓取代碼。所以它給你返回的不總是最有用的信息…

          $?howdoi?exit?vim

          INSPECT

          Python 的 inspect 模塊用于收集 Python 對象的信息,可以獲取類或函數(shù)的參數(shù)的信息,源碼,解析堆棧等等

          下方的代碼樣例使用了 inspect.getsource() 來打印它自身的源碼。同樣還使用了 inspect.getmodule() 來打印定義了 inspect.getmodule() 的模塊。最后一行代碼則是打印了本行代碼所在的行號。在本例中,就是 4 。

          import?inspect
          print(inspect.getsource(inspect.getsource))
          print(inspect.getmodule(inspect.getmodule))
          print(inspect.currentframe().f_lineno)

          inspect 模塊可以有效地讓你知道你的代碼是如何工作的,你也可以利用它來完成一些個人的源碼。

          JEDI

          Jedi 庫是一個代碼自動補(bǔ)齊和靜態(tài)分析的庫。它可以使你更快更高效地書寫代碼。

          除非你在開發(fā)自己的編輯器,否則你可能會非常喜歡將 Jedi 作為自己的編輯插件。

          你可能已經(jīng)正在使用 Jedi 而只是沒發(fā)現(xiàn)。IPython 項(xiàng)目就是利用 Jedi 來實(shí)現(xiàn)其自動補(bǔ)全功能。

          **KWARGS

          無論你學(xué)習(xí)那種語言,在這條學(xué)習(xí)之路上總有那么一些里程碑。在 Python 的編程學(xué)習(xí)中,理解神秘的 **kwargs 語法應(yīng)該算是一個重要的里程碑。

          雙星“**”放在字典的前面可以讓你將字典的內(nèi)容作為命名參數(shù)傳遞給函數(shù)。字典的鍵是參數(shù)的名字,鍵的值作為參數(shù)的值傳遞給函數(shù)。如下所示:

          dictionary?=?{"a":?1,?"b":?2}
          def?someFunction(a,?b):
          ????print(a?+?b)
          ????return
          #?these?do?the?same?thing:
          someFunction(**dictionary)
          someFunction(a=1,?b=2)

          當(dāng)你想要創(chuàng)建一個函數(shù),它需要能處理事先沒有定義過的參數(shù),那么就要用到前面提到的技巧了。

          LIST COMPREHENSIONS

          List comprehensions(列表推導(dǎo)式)

          列表推導(dǎo)式可以說是我最喜歡的 Python 技巧之一。這種表達(dá)式可以讓你寫出像自然語言一樣易于理解并且還很簡潔的代碼。

          你可以通過這個鏈接了解更多關(guān)于列表推導(dǎo)式的用法。地址:https://www.learnpython.org/en/List_Comprehensions

          numbers?=?[1,2,3,4,5,6,7]
          evens?=?[x?for?x?in?numbers?if?x?%?2?is?0]
          odds?=?[y?for?y?in?numbers?if?y?not?in?evens]
          cities?=?['London',?'Dublin',?'Oslo']
          def?visit(city):
          ????print("Welcome?to?"+city)
          for?city?in?cities:
          ????visit(city)

          MAP

          Python 有許多非常有用的內(nèi)置函數(shù)。其中一個就是 map()——特別是和 lambda 函數(shù)相結(jié)合的時候。

          x?=?[1,?2,?3]
          y?=?map(lambda?x?:?x?+?1?,?x)
          #?prints?out?[2,3,4]
          print(list(y))

          在這個例子中,map() 對 x 中的每一個元素都應(yīng)用了一個簡單的 lambda 函數(shù)。它會返回一個 map 對象,這個對象可以被轉(zhuǎn)化成可迭代對象,如列表或者元組。

          NEWSPAPER3K

          newspaper3k, 如果你還沒有見過它,那么你可能會被這個 Python newspaper 模塊所驚艷到。

          它可以讓你檢索到一系列國際領(lǐng)先出版物中的新聞和相關(guān)的元數(shù)據(jù)。你可以檢索圖片、文本和作者名。它甚至有一些內(nèi)置的自然語言處理功能。所以,如果你正在考慮使用 BeautifulSoup 或其他自制的爬蟲庫來應(yīng)用于你的下一個項(xiàng)目。那么,省省時間和精力吧,你其實(shí)只需要 $ pip install newspaper3k。

          OPERATOR OVERLOADING(操作符重載)

          Python 支持操作符重載。“操作符重載”其實(shí)是個簡單的概念,你是否曾經(jīng)想過為什么 Python 可以讓你使用“+”操作符來同時實(shí)現(xiàn)加法和連接字符串?這就是操作符重載在發(fā)揮作用。

          你可以定義使用 Python 標(biāo)準(zhǔn)操作符符號的對象,這可以讓你在特定的環(huán)境中使用特定的對象,就像下方的例子一樣。

          class?Thing:
          ????def?__init__(self,?value):
          ????????self.__value?=?value
          ????def?__gt__(self,?other):
          ????????return?self.__value?>?other.__value
          ????def?__lt__(self,?other):
          ????????return?self.__value?something?=?Thing(100)
          nothing?=?Thing(0)
          #?True
          something?>?nothing
          #?False
          something?#?Error
          something?+?nothing

          PPRINT

          Python 的默認(rèn) print 函數(shù)可以滿足日常的輸出任務(wù),但如果要打印更大的、嵌套式的對象,那么使用默認(rèn)的 print 函數(shù)打印出來的內(nèi)容會很丑陋。

          這個時候我們就需要 pprint 了,它可以讓復(fù)雜的結(jié)構(gòu)型對象以可讀性更強(qiáng)的格式顯示。這對于經(jīng)常要面對非普通數(shù)據(jù)結(jié)構(gòu)的 Python 開發(fā)者來說是必不可少的工具。

          import?requests
          import?pprint
          url?=?'https://randomuser.me/api/?results=1'
          users?=?requests.get(url).json()
          pprint.pprint(users)

          QUEUE(隊(duì)列)

          Python 支持多線程,它是通過標(biāo)準(zhǔn)庫中的 Queue 模塊來實(shí)現(xiàn)的。這個模塊可以讓你實(shí)現(xiàn)隊(duì)列數(shù)據(jù)結(jié)構(gòu)。這種數(shù)據(jù)結(jié)構(gòu)可以讓你根據(jù)特定的規(guī)則添加和檢索條目。

          “先進(jìn)先出”(FIFO)隊(duì)列可以讓你按照添加對象的順序來檢索他們。“后進(jìn)先出”(LIFO)隊(duì)列可以讓你首先訪問最近添加的對象。最后,優(yōu)先隊(duì)列可以讓你根據(jù)他們排序的順序進(jìn)行檢索。

          __repr__

          當(dāng)你定義一個類的時候,提供一個方法可以返回用來表示該類對象的可打印字符串會非常有用。例如:

          >>>?file?=?open('file.txt',?'r')
          >>>?print(file)
          'file.txt'
          ,?mode?'r'?at?0x10d30aaf0>

          這使得 debug 更加方便,具體的定義方式如下:

          class?someClass:
          ????def?__repr__(self):
          ????????return?""
          someInstance?=?someClass()
          #?prints?
          print(someInstance)

          sh

          sh 庫讓你像調(diào)用方法那樣調(diào)用系統(tǒng)中的命令。

          import?sh
          sh.pwd()
          sh.mkdir('new_folder')
          sh.touch('new_file.txt')
          sh.whoami()
          sh.echo('This?is?great!')

          TYPE HINT(類型提示)

          Python 是一種動態(tài)類型語言。當(dāng)你定義變量、函數(shù)、類別的時候,你不需要指定數(shù)據(jù)的類型。這可以大大提升你的開發(fā)速度,但也是有代價的。你可能會因?yàn)橐粋€簡單的輸入問題而導(dǎo)致運(yùn)行出錯。

          在 Python3.5 之后,這就不是問題了,在定義函數(shù)的時候你可以自主選擇要不要提供類型提示。

          def?addTwo(x?:?Int)?->?Int:
          ????return?x?+?2

          你還可以定義類型的別名:

          from?typing?import?List
          Vector?=?List[float]
          Matrix?=?List[Vector]
          def?addMatrix(a?:?Matrix,?b?:?Matrix)?->?Matrix:
          ??result?=?[]
          ??for?i,row?in?enumerate(a):
          ????result_row?=[]
          ????for?j,?col?in?enumerate(row):
          ??????result_row?+=?[a[i][j]?+?b[i][j]]
          ????result?+=?[result_row]
          ??return?result
          x?=?[[1.0,?0.0],?[0.0,?1.0]]
          y?=?[[2.0,?1.0],?[0.0,?-2.0]]
          z?=?addMatrix(x,?y)

          雖然不是強(qiáng)制性的,類型注釋可以讓你的代碼理解起來更加簡單。它們也允許你使用類型檢測工具在運(yùn)行之前捕獲這些零散的類型錯誤。如果你正在從事大型、復(fù)雜的項(xiàng)目,那么類型注釋也許會非常有幫助

          UUID

          通過 Python 標(biāo)準(zhǔn)庫中的 uuid 模塊,可以快速并簡單地生成統(tǒng)一的唯一ID(又稱UUID).

          import?uuid
          user_id?=?uuid.uuid4()
          print(user_id)

          UUID 是128位的全局唯一標(biāo)識符,通常由32字節(jié)的字符串表示。它可以保證時間和空間的唯一性,也稱為 GUID,全稱為:UUID —— Universally Unique IDentifier,Python 中叫 UUID。它通過 MAC 地址、時間戳、命名空間、隨機(jī)數(shù)、偽隨機(jī)數(shù)來保證生成ID的唯一性。

          VRITUAL ENVIRONMENTS

          這可能是我最喜歡的 Python技巧 了。你可能經(jīng)常要處理不止一個 Python 項(xiàng)目,不幸的是,有時候不同項(xiàng)目會依賴不同的Python版本。這個時候,你應(yīng)該在系統(tǒng)里安裝哪個 Python 版本呢?

          幸運(yùn)的是,Python 可以支持建立不同的虛擬環(huán)境來滿足不同的版本需求。

          python?-m?venv?my-project
          source?my-project/bin/activate
          pip?install?all-the-modules?

          現(xiàn)在你可以在一臺機(jī)器上安裝和運(yùn)行各個獨(dú)立版本的 Python。太棒了!

          WIKIPEDIA

          Wikipedia 有一個很棒的 API,它可以讓用戶通過編程訪問到維基的詞條內(nèi)容。使用 Python 中的 wikipedia 模塊可以讓你以最便捷的方式訪問該 API。

          import?wikipedia
          result?=?wikipedia.page('freeCodeCamp')
          print(result.summary)
          for?link?in?result.links:
          ????print(link)

          與真實(shí)站點(diǎn)一樣,該模塊支持多種語言、頁面消除歧義、隨機(jī)頁面檢索,甚至還有 donate() 方法。

          YAML

          YAML 是 “YAML 不是一種標(biāo)記語言”的外語縮寫。它是一個數(shù)據(jù)格式語言,是 JSON 的父集。和 JSON 不同的是,它可以存儲更復(fù)雜的對象,并且可以引用自身的元素。你還可以寫注釋,這讓 YAML 特別適合于書寫配置文件。

          PyYAML 模塊可以讓你使用 Python 調(diào)用 YAML。使用下列語句安裝:

          $?pip?install?pyyaml

          然后導(dǎo)入到項(xiàng)目中:

          import?yaml

          PyYAML 使你能夠儲存任何數(shù)據(jù)類型的 Python 對象,以及任何用戶定義類的實(shí)例。

          ZIP

          最后一個技巧也非常酷。你是否曾想要讓兩個列表中的元素逐個映射,組合成字典?那么你應(yīng)該使用 zip。

          keys?=?['a',?'b',?'c']
          vals?=?[1,?2,?3]
          zipped?=?dict(zip(keys,?vals))

          內(nèi)置函數(shù) zip() 接收若干可迭代對象,然后返回一個由多個元組組成的列表。每個元組根據(jù)輸入對象的位置索引對其元素進(jìn)行分組。還可以使用 *zip() 來“解壓”對象。

          python 大法好,掌握這些小的技巧,助你在 python 大神的道路上,披荊斬棘,所向披靡。

          原文:https://medium.freecodecamp.org/an-a-z-of-useful-python-tricks-b467524ee747

          往期推薦

          1、賊適合新手!這些練習(xí) Python 的網(wǎng)站太好玩了!
          2、程序員用5分鐘,把一個400多MB的蘋果安裝包削掉了187MB
          3、如何利用Python找到下一個“游戲驛站”?
          4、被稱為國內(nèi)版“谷歌”的F搜回來了,大變味!迷之操作實(shí)在太多...
          5、驚了 Win11還有變種版 更漂亮!

          點(diǎn)擊關(guān)注公眾號,閱讀更多精彩內(nèi)容
          瀏覽 51
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  狠狠干狠狠艹 | 精品久久久久久久久久久久久久 | 国内三级在线 | 操逼视频。 | 一级簧片在线免费观看 |