<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Python 之所以成為這麼一門受歡迎的語言一個原因是它的可讀性和表達能力非常強。Python 也因此經常被調侃為“可執行的虛擬碼”。不信你看:
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")
你想要在控制檯繪圖嘛?
$ pip install bashplotlib
現在,你的控制檯中就可以有圖了
Python
有一些很棒的預設資料型別,但是有時候他們並不會像你所希望的那樣發揮作用。
幸運的是,Python 標準庫提供了 collection
模組。它讓你可以使用更為多樣資料型別。
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!")
面對一個 Python 物件,你是否曾想過可以直接看到其屬性?你也許可以試試以下的程式碼:
>>> dir() >>> dir("Hello World") >>> dir(dir)
這是執行 Python 的時候一個非常有用的功能,用於動態探索你所使用的物件和模組。更多詳情,可以檢視這裡:
對的,你沒看錯!
$ pip install emoji
用 python
來建立表情包,你也可以。
from emoji import emojize print(emojize(":thumbs_up:"))
Python 非常受歡迎,這也就導致了它的版本更新非常快,新的版本往往會有很多新特性。你不更新,就無法使用。
然而,不要害怕。future
模組可以讓你匯入未來版本的功能。有點像時空穿梭有木有!
from __future__ import print_function print("Hello World!")
對於程式猿來說地理可能是一個非常有挑戰性的領域。但是,geopy
模組則讓它變得非常簡單。
$ pip install geopy
它通過提取一系列不同地理編碼服務的 api 來工作,讓你能夠獲得一個地方的完整街道地址、緯度、經度,甚至海拔。
這裡面同時還包含一個有用的“距離”類別。它能使用你選定的度量去計算了兩個地點之間的距離。
from geopy import GoogleV3 place = "221b Baker Street, London" location = GoogleV3().geocode(place) print(location.address) print(location.location)
有時候你碰到了一個程式設計問題,覺得自己之前明明見過它的解決方法,但是卻記不起來具體是怎麼樣的了。於是你想要去 StackOverflow
上找,但又不想離開這個終端。這個時候,你需要下面這個工具——howdoi
$ pip install howdoi
你所遇到的任何問題都可以問它,它會盡他所能給你返回一個答案。
$ howdoi vertical align css $ howdoi for loop in java $ howdoi undo commits in git
需要注意的是——它只從 StackOverflow
最頂端的答案中抓取程式碼。所以它給你返回的不總是最有用的資訊…
$ howdoi exit vim
Python
的 inspect
模組用於收集 Python 物件的資訊,可以獲取類或函數的引數的資訊,原始碼,解析堆疊等等
下方的程式碼樣例使用了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 作為自己的編輯外掛。
你可能已經正在使用 Jedi 而只是沒發現。IPython
專案就是利用 Jedi 來實現其自動補全功能。
無論你學習那種語言,在這條學習之路上總有那麼一些里程碑。在 Python 的程式設計學習中,理解神祕的 **kwargs 語法應該算是一個重要的里程碑。
雙星“**”放在字典的前面可以讓你將字典的內容作為命名引數傳遞給函數。字典的鍵是引數的名字,鍵的值作為引數的值傳遞給函數。
如下所示:
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)
當你想要建立一個函數,它需要能處理事先沒有定義過的引數,那麼就要用到前面提到的技巧了。
List comprehensions(列表推導式)
列表推導式可以說是我最喜歡的 Python
技巧之一。這種表示式可以讓你寫出像自然語言一樣易於理解並且還很簡潔的程式碼。
你可以通過這個連結瞭解更多關於列表推導式的用法。
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)
Python 有許多非常有用的內建函數。其中一個就是map()
——特別是和 lambda
函數相結合的時候。
x = [1, 2, 3] y = map(lambda x : x + 1 , x) # prints out [2,3,4] print(list(y))
在這個例子中,map()
對 x 中的每一個元素都應用了一個簡單的 lambda 函數。它會返回一個 map 物件,這個物件可以被轉化成可迭代物件,如列表或者元組。
newspaper3k
, 如果你還沒有見過它,那麼你可能會被這個Python newspaper
模組所驚豔到。
它可以讓你檢索到一系列國際領先出版物中的新聞和相關的後設資料。你可以檢索圖片、文字和作者名。它甚至有一些內建的自然語言處理功能。所以,如果你正在考慮使用 BeautifulSoup
或其他自制的爬蟲庫來應用於你的下一個專案。那麼,省省時間和精力吧,你其實只需要$ pip install newspaper3k
。
Python 支援操作符過載。“操作符過載”其實是個簡單的概念,你是否曾經想過為什麼 Python 可以讓你使用“+”操作符來同時實現加法和連線字串?這就是操作符過載在發揮作用。
你可以定義使用 Python 標準操作符符號的物件,這可以讓你在特定的環境中使用特定的物件,就像下方的例子一樣。
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 < other.__value something = Thing(100) nothing = Thing(0) # True something > nothing # False something < nothing # Error something + nothing
Python 的預設 print
函數可以滿足日常的輸出任務,但如果要列印更大的、巢狀式的物件,那麼使用預設的 print
函數列印出來的內容會很醜陋。
這個時候我們就需要 pprint
了,它可以讓複雜的結構型物件以可讀性更強的格式顯示。這對於經常要面對非普通資料結構的 Python 開發者來說是必不可少的工具。
import requests import pprint url = 'https://randomuser.me/api/?results=1' users = requests.get(url).json() pprint.pprint(users)
Python 支援多執行緒,它是通過標準庫中的 Queue
模組來實現的。這個模組可以讓你實現佇列資料結構。這種資料結構可以讓你根據特定的規則新增和檢索條目。
“先進先出”(FIFO)佇列可以讓你按照新增物件的順序來檢索他們。“後進先出”(LIFO)佇列可以讓你首先存取最近新增的物件。最後,優先佇列可以讓你根據他們排序的順序進行檢索。
__repr__
當你定義一個類的時候,提供一個方法可以返回用來表示該類物件的可列印字串會非常有用。例如:
>>> file = open('file.txt', 'r') >>> print(file) <open file 'file.txt', mode 'r' at 0x10d30aaf0>
這使得 debug 更加方便,具體的定義方式如下:
class someClass: def __repr__(self): return "<some description here>" someInstance = someClass() # prints <some description here> print(someInstance)
sh 庫讓你像呼叫方法那樣呼叫系統中的命令。
import sh sh.pwd() sh.mkdir('new_folder') sh.touch('new_file.txt') sh.whoami() sh.echo('This is great!')
Python 是一種動態型別語言。當你定義變數、函數、類別的時候,你不需要指定資料的型別。這可以大大提升你的開發速度,但也是有代價的。你可能會因為一個簡單的輸入問題而導致執行出錯。
在 Python3.5
之後,這就不是問題了,在定義函數的時候你可以自主選擇要不要提供型別提示。
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)
雖然不是強制性的,型別註釋可以讓你的程式碼理解起來更加簡單。它們也允許你使用型別檢測工具在執行之前捕獲這些零散的型別錯誤。如果你正在從事大型、複雜的專案,那麼型別註釋也許會非常有幫助
通過 Python 標準庫中的 uuid 模組,可以快速並簡單地生成統一的唯一ID(又稱UUID).
import uuid user_id = uuid.uuid4() print(user_id)
UUID 是128位元的全域性唯一識別符號,通常由32位元組的字串表示。它可以保證時間和空間的唯一性,也稱為 GUID,全稱為:UUID —— Universally Unique IDentifier,Python 中叫 UUID。它通過 MAC 地址、時間戳、名稱空間、亂數、偽亂數來保證生成ID的唯一性。
這可能是我最喜歡的 Python技巧 了。你可能經常要處理不止一個 Python 專案,不幸的是,有時候不同專案會依賴不同的Python版本。這個時候,你應該在系統裡安裝哪個 Python 版本呢?
幸運的是,Python 可以支援建立不同的虛擬環境來滿足不同的版本需求。
python -m venv my-project source my-project/bin/activate pip install all-the-modules
現在你可以在一臺機器上安裝和執行各個獨立版本的 Python。太棒了!
Wikipedia 有一個很棒的 API,它可以讓使用者通過程式設計存取到維基的詞條內容。使用 Python 中的 wikipedia 模組可以讓你以最便捷的方式存取該 API。
import wikipedia result = wikipedia.page('freeCodeCamp') print(result.summary) for link in result.links: print(link)
與真實站點一樣,該模組支援多種語言、頁面消除歧義、隨機頁面檢索,甚至還有 donate()
方法。
YAML 是 “YAML 不是一種標示語言”的外語縮寫。它是一個資料格式語言,是 JSON 的父集。和 JSON 不同的是,它可以儲存更復雜的物件,並且可以參照自身的元素。你還可以寫註釋,這讓 YAML 特別適合於書寫組態檔。
PyYAML 模組可以讓你使用 Python 呼叫 YAML。使用下列語句安裝:
$ pip install pyyaml
然後匯入到專案中:
import yaml
PyYAML 使你能夠儲存任何資料型別的 Python 物件,以及任何使用者定義類的範例。
最後一個技巧也非常酷。你是否曾想要讓兩個列表中的元素逐個對映,組合成字典?那麼你應該使用 zip。
keys = ['a', 'b', 'c'] vals = [1, 2, 3] zipped = dict(zip(keys, vals))
置函數zip()
接收若干可迭代物件,然後返回一個由多個元組組成的列表。每個元組根據輸入物件的位置索引對其元素進行分組。還可以使用 *zip() 來“解壓”物件。
到此這篇關於分享Python 的24個程式設計超好用技巧的文章就介紹到這了,更多相關Python 的24個程式設計技巧內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45