這些Python庫&技巧,你肯定還不知道,值得收藏。
點擊上方「
Python開發
」,選擇「置頂公眾號」
關鍵時刻,第一時間送達!
先不說楚楓的這般年紀,能夠踏入元武一重說明了什麼,最主要的是,楚楓在剛剛踏入核心地帶時,明明只是靈武七重,而在這兩個月不到的時間,連跳兩重修為,又跳過一個大境界,踏入了元武一重,這般進步速度,簡直堪稱變態啊。
「這楚楓不簡單,原來是一位天才,若是讓他繼續成長下去,絕對能成為一號人物,不過可惜,他太狂妄了,竟與龔師兄定下生死約戰,一年時間,他再厲害也無法戰勝龔師兄。」有人認識到楚楓的潛力後,為楚楓感到惋惜。
「哼,何須一年,此子今日就必敗,巫九與龔師兄關係甚好,早就看他不順眼了,如今他竟敢登上生死台挑戰巫九,巫九豈會放過他?」但也有人認為,楚楓今日就已是在劫難逃。
「何人挑戰老子?」就在這時,又是一聲爆喝響起,而後一道身影自人群之中掠出,最後穩穩的落在了比斗台上。
這位身材瘦弱,身高平平,長得那叫一個猥瑣,金鉤鼻子蛤蟆眼,嘴巴一張牙帶色兒,說話臭氣能傳三十米,他若是當面對誰哈口氣,都能讓那人跪在地上狂嘔不止。
不過別看這位長得不咋地,他在核心地帶可是鼎鼎有名,劍道盟創建者,青龍榜第九名,正是巫九是也。
「你就是巫九?」楚楓眼前一亮,第一次發現,世間還有長得如此奇葩的人。
巫九鼻孔一張,大嘴一咧,拍著那乾癟的肚子,得意洋洋的道:「老子就是巫九,你挑戰老子?」
「不是挑戰你,是要宰了你。」楚楓冷聲笑道。
「好,老子滿足你這個心愿,長老,拿張生死狀來,老子今日在這裡了解了這小子。」巫九扯開嗓子,對著下方吼了一聲。
如果他對內門長老這麼說話,也就算了,但是敢這麼跟核心長老說話的,他可真是算作膽肥的,就連許多核心弟子,都是倒吸了一口涼氣,心想這楚楓夠狂,想不到這巫九更狂。
不過最讓人無言的就是,巫九話音落下不久,真有一位核心長老自人群走出,緩緩得來到了比斗台上,左手端著筆墨,右手拿著生死狀,來到了巫九的身前。
「我去,這巫九什麼身份,竟能這般使喚核心長老?」有人吃驚不已,那長老修為不低,乃是元武七重,比巫九還要高兩個層次,但卻這般聽巫九的話,著實讓人吃驚不已。
「這你就不知道了吧,巫九在前些時日,拜了鍾離長老為師尊,已正式得到鍾離長老的親傳。」有人解釋道。
「鍾離長老?可是那位性情古怪的鐘離一護?」
「沒錯,就是他。」
「天哪,巫九竟然拜入了他的門下?」
人們再次大吃一驚,那鍾離一護在青龍宗可是赫赫有名,若要是論其個人實力,在青龍宗內絕對能夠排入前三,連護宗六老單打獨鬥都不會是他的對手。
只不過那鍾離一護,如同諸葛青雲一樣,也是一位客卿長老,所以在青龍宗內只是掛個頭銜,什麼事都不管,更別說傳授宗內弟子技藝了,如今巫九竟然能拜入他老人家門下,著實讓人羨慕不已。
「恩怨生死台,的確可以決鬥生死,但必須要有所恩怨,你們兩個人,可有恩怨?」那位長老開口詢問道。
來源:機器之心
作者:Peter Gleeson
python開發整理髮布,轉載請聯繫作者獲得授權
被人工智慧捧紅的 Python 已是一種發展完善且非常多樣化的語言,其中肯定有一些你尚未發現的功能。本文或許能夠讓你學到一些新技巧。
Python 是世界上最流行、熱門的編程語言之一,原因很多,比如:
易於學習
超高的通用性
具備大量模塊和庫
本文將分享一些使用 Python 的技巧,順序按照 A-Z 排列。
all or any
Python 非常受歡迎的原因之一是其可讀性和表達性。
人們還經常把 Python 笑稱為「可執行偽碼(executable pseudocode)」。但是,當你可以編寫這樣的代碼時,很難去反駁這種言論:
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"
)bashplotlib
想在控制台中繪圖嗎?
$ pip install bashplotlib
使用上面的行,即可在控制台中繪圖。
collections
Python 有一些很棒的默認數據類型,但有時候它們可能不會盡如你意。
不過,Python 標準庫提供了 collections 模塊。這個方便的附加組件可以為你提供更多數據類型。
from
collectionsimport
OrderedDict, Counter# Remembers the order the keys are added!
x = OrderedDict(a=
1
, b=2
, c=3
)# Counts the frequency
of
each charactery = Counter(
"Hello World!"
)dir
你是否想過如何查看 Python 對象內部及其具有哪些屬性?
輸入以下命令行:
>>> dir()
>>> dir(
"Hello World"
)>>> dir(dir)
當以交互方式運行 Python 時,這可能是一個非常有用的功能,並且可以動態地探索你正在使用的對象和模塊。
emoji
是的,真的有。
$ pip install emoji
別以為我不知道你會偷偷試它→→
from
emojiimport
emojizeprint(emojize(
":thumbs_up:"
))from __future__ import
Python 流行的一個結果是,總有新版本正在開發中。新版本意味著新功能——除非你的版本已經過時。
不過,別擔心。__ future__模塊允許用戶導入新版 Python 的功能。這簡直就像時間旅行,或者魔法什麼的。
from
__future__import
print_functionprint(
"Hello World!"
)geopy
地理(Geography)對於程序員來說可能是一個具有挑戰性的領域。但是 geopy 模塊讓它變得異常簡單。
$ pip install geopy
它通過抽取一系列不同地理編碼服務的 API 來工作,使用戶獲取一個地方的完整街道地址、緯度、經度,甚至海拔高度。
另外一個有用的功能是距離:它可以用你喜歡的度量單位計算出兩個位置之間的距離。
from
geopyimport
GoogleV3place =
"221b Baker Street, London"
location = GoogleV3().geocode(place)
print(location.address)
print(location.location)
howdoi
陷入編碼問題,卻不記得以前見過的解決方案?需要檢查 StackOverflow,但不想離開終端?
那麼你需要這個有用的命令行工具
$ pip install howdoi
無論你有什麼問題都可以問它,它會儘力回答。
$ howdoi vertical align css
$ howdoi
for
loopin
java$ howdoi undo commits
in
git但是請注意——它會從 StackOverflow 的最高票答案中抓取代碼。也就是說它提供的信息並非總是有用……
$ howdoi exit vim
inspect
Python 的 inspect 模塊非常有助於理解問題背後的詳情。你甚至可以在 inspect 模塊上調用其方法!
下面的代碼示例使用 inspect.getsource() 列印自己的源代碼。它還使用 inspect.getmodule() 列印定義它的模塊。
最後一行代碼列印出自己的行號。
import
inspectprint(inspect.getsource(inspect.getsource))
print(inspect.getmodule(inspect.getmodule))
print(inspect.currentframe().f_lineno)
當然,除了這些瑣碎的用途之外,inspect 模塊還能幫助你理解代碼正在做的事。你還可以用它編寫自文檔化代碼。
Jedi
Jedi 庫是一個自動完成和代碼分析的庫。它使代碼編寫變得更快、效果更高。
除非你正在開發自己的 IDE,否則你肯定會對使用 Jedi 庫作為編輯插件很感興趣。
你可能已經在使用 Jedi 了。IPython 項目就使用 Jedi 實現代碼自動完成功能。
**kwargs
學習任何語言時都會遇到很多里程碑。對於 Python 來說,理解神秘的**kwargs 語法可能算是其中之一。
詞典對象前面的雙星號可以讓你把該詞典的內容作為命名參數輸入到函數中。
詞典的秘鑰是參數名,值是傳遞給函數的值。你甚至不需要稱它為 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
xin
numbersif
x %2
is0
]odds = [y
for
yin
numbersif
y notin
evens]cities = [
"London"
,"Dublin"
,"Oslo"
]def visit(city):
print(
"Welcome to "
+city)for
cityin
cities:visit(city)
map
Python 通過許多內置功能支持函數式編程。map() 函數是最有用的函數之一——特別是當它與 lambda 函數結合使用時。
x = [
1
,2
,3
]y = map(lambda x : x +
1
, x)# prints out [
2
,3
,4
]print(list(y))
在上面的例子中,map() 將一個簡單的 lambda 函數應用於 x 中的每個元素。它返回一個 map 對象,該對象可以被轉換成可迭代的對象,如列表或元組。
newspaper3k
如果你之前沒有見過它,那麼我建議你先查看:
https://pypi.org/project/newspaper3k/。
它可以幫助你從大量頂級國際出版物中檢索到新聞文章和相關元數據。你可以檢索圖像、文本和作者名。
它還有一些內置的 NLP 功能。
地址:
https://newspaper.readthedocs.io/en/latest/user_guide/quickstart.html#performing-nlp-on-an-article
如果你想在下一個項目中使用 BeautifulSoup 或其它 DIY 網頁抓取庫,那麼不如使用$ pip install newspaper3k,既省時又省事,何樂而不為呢?
運算符重載(Operator overloading)
Python 支持運算符重載。
它實際上是一個簡單的概念。你有沒有想過為什麼 Python 允許用戶使用 + 運算符來將數字相加,並級聯字元串?這就是運算符重載在發揮作用。
你可以使用 Python 的標準運算符號來定義對象,這樣你可以在與這些對象相關的語境中使用它們。
class
Thing
:def
__init__
(self
,value
):self
.__value
= valuedef __gt__(self, other):
return
self.__value > other.__valuedef __lt__(self, other):
return
self.__value < other.__valuesomething = Thing(
100
)nothing = Thing(
0
)# True
something > nothing
# False
something < nothing
#
Error
something + nothing
pprint
Python 的默認 print 函數就可以實現列印功能。但如果嘗試列印較大的嵌套對象,就會發現列印結果很醜。
這時 Python 標準庫的 pretty printer 模塊就可以發揮作用了。該模塊可以將複雜的結構化對象以一種易讀的格式列印出來。
pretty printer 模塊:
https://docs.python.org/3/library/pprint.html
Python 開發者的必備技能之一就是處理複雜的數據結構。
import
requestsimport
pprinturl =
"https://randomuser.me/api/?results=1"
users = requests.get(url).json()
pprint.pprint(users)
Queue
Python 支持多線程,而這是由 Python 標準庫的 Queue 模塊支持的。
該模塊允許用戶實現隊列(queue)數據結構。隊列數據結構允許用戶根據特定的規則添加和檢索條目。
『First in, first out』 (FIFO) 隊列允許用戶按照對象被添加的順序來檢索對象。『Last in, first out』 (LIFO) 隊列允許用戶首先訪問最新添加的對象。
最後,優先順序隊列(priority queue)允許用戶根據對象對應的優先順序類別來檢索對象。
如何使用 queue 在 Python 中實現多線程編程,示例詳見:
https://www.tutorialspoint.com/python3/python_multithreading.htm。
__repr__
在 Python 中定義一個類別或對象時,以「官方」方式將對象表示為字元串很有用。例如:
>>> file = open(
"file.txt"
,"r"
)>>> print(file)
<open file
"file.txt"
, mode"r"
at0x10d30aaf0
>這使代碼 debug 變得簡單很多。將字元串添加到類別定義,如下所示:
class
someClass
:def
__repr__
(self
):return
"<some
description
here
>"someInstance
= someClass()# prints <some description here>
print(someInstance)
sh
Python 是一種偉大的腳本語言,不過有時使用標準 os 和 subprocess 庫會有點棘手。
sh 庫提供了一種不錯的替代方案。
sh 庫:http://amoffat.github.io/sh/
該庫允許用戶像使用普通函數一樣調用任意程序,這對自動化工作流和任務非常有用。
from
shimport
*sh.pwd()
sh.mkdir(
"new_folder"
)sh.touch(
"new_file.txt"
)sh.whoami()
sh.echo(
"This is great!"
)類型提示(Type hints)
Python 是動態語言。在定義變數、函數、類別等時無需指定數據類型。
這有利於縮短開發周期。但是,簡單的類型錯誤(typing issue)導致的運行時錯誤真的太煩了。
從 Python 3.5 版本開始,用戶可以選擇在定義函數時開啟類型提示。
def addTwo(x : Int) -> Int:
return
x +2
你還可以定義類型別名:
from
typingimport
ListVector = List[float]
Matrix = List[Vector]
def addMatrix(a : Matrix,
b
: Matrix) -> Matrix:result = []
for
i,rowin
enumerate(a):result_row =[]
for
j, colin
enumerate(row):result_row += [a[i][j] + b[i][j]]
result += [result_row]
return
resultx = [[
1.0
,0.0
], [0.0
,1.0
]]y = [[
2.0
,1.0
], [0.0
,-2.0
]]z = addMatrix(x, y)
儘管非強制,但類型注釋可以使代碼更易理解。
它們還允許你在運行之前使用類型檢查工具捕捉 TypeError。在進行大型複雜項目時執行此類操作是值得的。
uuid
生成通用唯一標識符(Universally Unique ID,UUID)的一種快速簡單方法就是使用 Python 標準庫的 uuid 模塊。
uuid 模塊:
https://docs.python.org/3/library/uuid.html
import
uuiduser_id = uuid.uuid4()
print(user_id)
這創建了一個隨機化後的 128 比特數字,該數字幾乎必然是唯一的。
事實上,可以生成 2122可能的 UUID。這個數字超過了 5,000,000,000,000,000,000,000,000,000,000,000,000。
在給定集合中找出重複數字的可能性極低。即使有一萬億 UUID,重複數字存在的概率也遠遠低於十億分之一。
虛擬環境(Virtual environment)
這可能是 Python 中我最喜歡的事物了。
你可能同時處理多個 Python 項目。不幸的是,有時候兩個項目依賴於相同依賴項的不同版本。那你要安裝哪個版本呢?
幸運的是,Python 支持虛擬環境,這使得用戶能夠充分利用兩種環境。見下列行:
python -m venv my-project
source my-project/bin/activate
pip install all-the-modules
現在你在一台機器上具備獨立的多個 Python 版本了。問題解決!
wikipedia
Wikipedia 擁有一個很棒的 API,允許用戶以編程方式訪問巨大體量的免費知識和信息。
wikipedia 模塊使得訪問該 API 非常便捷。
Wikipedia 模塊:
https://wikipedia.readthedocs.io/en/latest/quickstart.html
import
wikipediaresult = wikipedia.page(
"freeCodeCamp"
)print(result.summary)
for
linkin
result.links:print(link)
和真實的維基百科網站類似,該模塊支持多種語言、頁面消歧、隨機頁面檢索,甚至還具備 donate() 方法。
xkcd
humour 是 Python 語言的一個關鍵特徵,其名稱來自英國喜劇片《蒙提·派森的飛行馬戲團》(Monty Python and the Flying Circus)。Python 的很多官方文檔引用了該喜劇片最著名的劇情。
幽默感並不限於文檔。試著運行下列行:
import
antigravity將打開 xkcd 畫的 Python 漫畫。不要改變這一點,Python。不要改變。
YAML
YAML 代表 『YAML Ain』t Markup Language』。它是一種數據格式語言,是 JSON 的超集。
與 JSON 不同,它可以存儲更複雜的對象並引用自己的元素。你還可以編寫注釋,使其尤其適用於編寫配置文件。
PyYAML 模塊(https://pyyaml.org/wiki/PyYAMLDocumentation)可以讓你在 Python 中使用 YAML。安裝:
$ pip install pyyaml
然後導入到項目中:
import
yamlPyYAML 使你能夠存儲任何數據類型的 Python 對象,以及任何用戶定義類別的實例。
zip
給你支最後一招,非常酷。還在用兩個列表來組成一部詞典嗎?
keys = [
"a"
,"b"
,"c"
]vals = [
1
,2
,3
]zipped = dict(zip(keys, vals))
zip() 內置函數使用多個可迭代對象作為輸入並返回元組列表。每個元組按位置索引對輸入對象的元素進行分組。
你也可以通過調用*zip() 來「解壓」對象。
【點擊成為Java大神】


TAG:Python開發 |