中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

從A到Z,26個(gè)實(shí)用Python模塊/函數(shù)速覽

2018-11-01    來源:raincent

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬Linux鏡像隨意使用

Python是世界上最受歡迎的按需編程語言之一,因?yàn)椋?/p>

♦  它容易學(xué)習(xí)
♦  它用途廣泛
♦  它有一大堆模塊和庫(kù)

作為一名數(shù)據(jù)科學(xué)家,使用Python稱得上是我的家常便飯。一路走來,現(xiàn)在我已經(jīng)搜集了不少有用的小技巧,是時(shí)候該把它們分享給大家了!

在這里,我會(huì)用從字母A開始,到Z結(jié)束,簡(jiǎn)單介紹一些常用技巧。它們大多是我在日常工作中偶然發(fā)現(xiàn)的,部分來自Python標(biāo)準(zhǔn)庫(kù)文檔和其他人的總結(jié)。

all or any

Python之所以這么流行,離不開它強(qiáng)大的可讀性和表現(xiàn)力。人們經(jīng)常開玩笑稱Python是“可執(zhí)行的偽代碼”,雖然聽起來讓人不太舒服,但當(dāng)真正編寫代碼時(shí),你會(huì)發(fā)現(xiàn)自己好像真的沒什么反駁的“底氣”:

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

你想在終端繪制基礎(chǔ)圖嗎?

$ pip install bashplotlib

一個(gè)命令搞定沒有GUI情況下的數(shù)據(jù)可視化。

collections

Python擁有一些內(nèi)置的數(shù)據(jù)類型,但有時(shí)它們并不符合我們的需求。幸運(yùn)的是,Python標(biāo)準(zhǔn)庫(kù)有一個(gè)collections模塊,它在str, int, list, tuple, set, dict等數(shù)據(jù)類型的基礎(chǔ)上提供了額外的數(shù)據(jù)類型。

from collections import OrderedDict, Counter
# 記住添加key的順序!
x = OrderedDict(a=1, b=2, c=3)
# 計(jì)算每個(gè)字符的頻率
y = Counter("Hello World!")

dir

在Python中,我們?cè)撛趺床榭磳?duì)象及其屬性?答案是使用dir()函數(shù)。

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

當(dāng)你正以交互方式運(yùn)行Python,并動(dòng)態(tài)探索正在使用的對(duì)象的模塊時(shí),這會(huì)是一個(gè)非常有用的函數(shù)。

emoji

是的,沒有表情包的代碼有什么靈魂?

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

from__future__ import

Python的更新迭代比較頻繁,它的每個(gè)新版本都會(huì)增加一些新的功能,或是對(duì)舊版本做一些調(diào)整,修改某些bug——這意味著有些改動(dòng)是不兼容舊版本的。

為了讓以前能正常運(yùn)行的代碼在新版本中也能用,我們可以調(diào)用Python的__future__模塊,把新版本的特性導(dǎo)入到當(dāng)前版本。

from __future__ import
print_functionprint("Hello World!")

geopy

對(duì)于程序員來說,地理位置可能是一個(gè)頗具挑戰(zhàn)的領(lǐng)域,但geopy模塊可以讓整個(gè)過程變得非常簡(jiǎn)單。

$ pip install geopy

它提供一系列不同地理編碼服務(wù)的API,能讓你輕松獲得全球某個(gè)地區(qū)的國(guó)家、城市、完整街道地址、緯度、經(jīng)度甚至海拔信息。

它還包含一個(gè)有用的距離類,能測(cè)量?jī)蓚(gè)位置之間的距離。

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

howdoi

有時(shí)候,你可能剛看過某個(gè)問題的解決辦法,但一上手又全忘了。在這種情況下,如果你既不想離開終端,又想上StackOverflow去查,該怎么辦?

你只需這個(gè)命令行工具:

$ pip install howdoi

無論你有什么問題,它都會(huì)盡力回答。

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

需要注意的是,雖然它的答案是StackOverflow置頂答案的刪減版,但這并不意味著它就百分百有用。

$ howdoi exit vim

inspect

Python的inspect模塊可以檢查模塊的一些基本信息,它主要有4個(gè)用處:類型檢查、獲取源碼、獲取類或函數(shù)的參數(shù)的信息、解析堆棧。

下面是用inspect.getsource()打印源碼的一個(gè)示例,它還能用inspect.getmodule()打印自定義模塊。

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

除了以上用途,檢查模塊有助于我們更好地理解代碼,編寫可維護(hù)代碼。

Jedi

Jedi是一個(gè)自動(dòng)完成/靜態(tài)分析庫(kù),它能使代碼編寫速度更快、效率更高。

如果你不是IDE開發(fā)人員,你可能只是想把Jedi用作瀏覽器插件或在shell中使用。這是做得到的,詳情可以閱讀這篇介紹。

**kwargs

無論你學(xué)習(xí)的是什么編程語言,你都會(huì)遇到那么幾個(gè)很難理解的知識(shí)點(diǎn)。在Python中,**kwargs語法算得上是其中的一個(gè)。

字典對(duì)象前面的雙星號(hào)允許你將該字典的內(nèi)容作為命名參數(shù)傳遞給函數(shù),字典的鍵是參數(shù)名稱,值是傳遞給函數(shù)的值。

dictionary = {"a": 1, "b": 2}def someFunction(a, b): print(a + b) return# 這樣做效果同上someFunction(**dictionary)someFunction(a=1, b=2)

當(dāng)你想要編寫可以處理未預(yù)先定義的命名參數(shù)的函數(shù)時(shí),這個(gè)模塊很有用。

List comprehensions

列表解析式相信是很多人喜歡Python的一個(gè)理由。這些表達(dá)式可以很容易地編寫非常干凈的代碼,幾乎就像自然語言。

dictionary = {"a": 1, "b": 2}
def someFunction(a, b):
print(a + b)
return
# 這樣做效果同上
someFunction(**dictionary)
someFunction(a=1, b=2)

map

Python通過許多內(nèi)置功能支持函數(shù)式編程。其中最有用的是map()函數(shù)——尤其是和lambda函數(shù)結(jié)合使用。

x = [1, 2, 3]
y = map(lambda x : x + 1 , x)
# 打印出[2,3,4]
print(list(y))

在上面的示例中,map()將簡(jiǎn)單的lambda函數(shù)應(yīng)用于每個(gè)元素x。它返回一個(gè)map對(duì)象,可以將其轉(zhuǎn)換為某個(gè)可迭代對(duì)象,例如list或tuple。

newspaper3k

如果你之前從沒聽說過newspaper3k,那這個(gè)模塊可能會(huì)讓你的眼前一亮。

這是一個(gè)用于文章提取的庫(kù),它允許你從大量國(guó)際出版物中檢索新聞文章和相關(guān)的元數(shù)據(jù),如圖像、文本和作者姓名。它甚至還有一些內(nèi)置的NLP函數(shù)。

Operator overloading

Python支持操作符重載。雖然聽起來很專業(yè),但它的概念其實(shí)很簡(jiǎn)單,你有沒有想過,為什么Python允許我們用+這個(gè)操作符添加數(shù)字和連接字符串?

這其實(shí)就是實(shí)踐中的操作符重載。你可以按自己的需求定義使用操作符符號(hào)的對(duì)象,然后把它們放進(jì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 < other.__value
something = Thing(100)
nothing = Thing(0)
# True
something > nothing
# False
something < nothing
# Error
something + nothing

pprint

Python的pprint模塊提供了可以按照某個(gè)格式正確的顯示python已知類型數(shù)據(jù)的一種方法,這種格式可被解析器解析,又很易讀,稱得上是Python開發(fā)人員必備方法。

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

Queue

Queue模塊是Python中提供隊(duì)列操作的模塊,它為支持多線程操作提供了諸多便利。

這個(gè)結(jié)構(gòu)的規(guī)則是“先進(jìn)先出”。其中,“先進(jìn)先出”(FIFO)意味著隊(duì)列允許我們按照添加順序檢索對(duì)象。“后進(jìn)先出”(LIFO)則允許我們?cè)L問最新添加的對(duì)象。而PriorityQueue是看優(yōu)先級(jí)隊(duì)列級(jí)別,誰更低,誰先出來。

__repr__

在Python中定義類或?qū)ο髸r(shí),提供一種將該對(duì)象表示為字符串的“正規(guī)”方法會(huì)很有用。比如:

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

這有利于更便捷地debug。如果你要把它放進(jìn)定義的類:

class someClass:
def __repr__(self):
return "<some description here>"
someInstance = someClass()
# prints <some description here>
print(someInstance)

 

sh

Python是一種很棒的腳本語言,但是如果無論寫什么腳本都要用它的標(biāo)準(zhǔn)os和子進(jìn)程庫(kù),這就太不自由了。

sh是一個(gè)成熟的Python子進(jìn)程接口,允許你像調(diào)用函數(shù)一樣調(diào)用任何程序。

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

Type hints

Python是一種動(dòng)態(tài)類語言:定義變量、函數(shù)、類等時(shí),我們不需要指定數(shù)據(jù)類型。

雖然這種做法大大縮短了開發(fā)用時(shí),但是一旦寫了那么多代碼,我們難免會(huì)忘記每個(gè)類型具體是什么,這時(shí),如果我們?cè)倩仡^仔細(xì)閱讀,就太麻煩了。

從Python 3.5開始,你可以選擇在定義函數(shù)時(shí)提供類型標(biāo)注提示:

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)制性的,但類型注釋可以讓你的代碼更容易理解。此外,它還允許我們?cè)谶\(yùn)行類型檢查工具是捕獲那些雜散的TypeErrors,這對(duì)于大型復(fù)雜項(xiàng)目開發(fā)是個(gè)幫助。

UUID

生成通用唯一標(biāo)識(shí)符(UUID)最方便的做法是通過Python標(biāo)準(zhǔn)庫(kù)的uuid模塊。它生成重復(fù)ID的概率非常低,不到十億分之一。

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

上述代碼會(huì)創(chuàng)建一個(gè)隨機(jī)的128位數(shù)字,它幾乎肯定是唯一的。事實(shí)上,我們可以用它生成超過2122個(gè)可能的UUID,感受一下這個(gè)數(shù)量:5,000,000,000,000,000,000,000,000,000,000,000,000,000。

Virtual environments

通常情況下,我們會(huì)用一個(gè)版本的Python處理多個(gè)項(xiàng)目,但有時(shí)不同項(xiàng)目,甚至一個(gè)項(xiàng)目都會(huì)用到不同版本的python、不同的包,我們?cè)撛趺崔k呢?

Python對(duì)虛擬環(huán)境的支持可以幫我們解決這個(gè)問題:

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

wikipedia

我們可以通過維基百科的API以編程方式訪問大量免費(fèi)知識(shí),非常方便。

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

和真實(shí)網(wǎng)站一樣,該模塊提供對(duì)多種語言的支持、消歧義頁(yè)、隨機(jī)頁(yè)面檢索,甚至還有donate()捐款。

xkcd

Python這么流行,幽默元素自然必不可少,畢竟它的名字來自英國(guó)超現(xiàn)實(shí)幽默表演團(tuán)體Monty Python(巨蟒劇團(tuán))。它的大部分官方文檔都隱藏著這個(gè)彩蛋。

輸入:

import antigravity

你會(huì)看到:

 

 

地面:你上天了!咋做到的?

天上:Python!

天上:我昨晚學(xué)會(huì)了Python!太簡(jiǎn)單啦!—— 只要寫print "Hello World!"就能輸出Hello World!

地面:喵喵喵?動(dòng)態(tài)類型?泛空格符?

天上:加入我們吧!編程又成了樂事!這里是個(gè)全新的世界!

地面:那你是咋上去的呀?

天上:我只是寫了import antigravity……

地面:就這?

天上:然后為了做對(duì)比,我又把藥柜里的藥全嗑了。但是我覺得還是Python讓我“升天”。

YAML

YAML全稱YAML Is Not Markup Language,它是一種數(shù)據(jù)格式化語言,非常簡(jiǎn)潔和強(qiáng)大。

YAML被很多人認(rèn)為是可以超越的xml和JSON的文件格式。對(duì)比XML,除了擁有XML的眾多優(yōu)點(diǎn)外,它足夠簡(jiǎn)單,易于使用。而對(duì)于JSON,YAML可以寫成規(guī)范化的配置文件。

安裝yaml模塊:

$ pip install pyyaml

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

import yaml

PyYAML允許你存儲(chǔ)任何數(shù)據(jù)類型的Python對(duì)象,以及任何用戶定義類的實(shí)例。

zip

在Python中,zip()函數(shù)用于將可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的列表。

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

如果各個(gè)迭代器的元素個(gè)數(shù)不一致,則返回列表長(zhǎng)度與最短的對(duì)象相同,利用 * 號(hào)操作符,可以將元組解壓為列表。(在Python 3.x中,為了減少內(nèi)存,zip()返回的是一個(gè)對(duì)象)

謝謝閱讀!

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

標(biāo)簽: Google 代碼 腳本

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:大數(shù)據(jù)預(yù)測(cè)打車費(fèi)用的方法論:數(shù)據(jù)分析和機(jī)器學(xué)習(xí),一個(gè)沒落下!

下一篇:城市規(guī)劃師的新征程:用數(shù)據(jù)思維喚醒城市的智商與情商