精選26個Python實用技巧,想秀技能先Get這份技術列表!

轉載自 https://mp.weixin.qq.com/s/ttuB63_N5SQdOhIwLFGYgg

精選26個Python實用技巧,想秀技能先Get這份技術列表!

1. all 或 any

人們經常開玩笑說 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")

2. bashplotlib

你想在控制檯(console)上繪製圖形嗎?

pip install bashplotlib

這樣你在控制檯中就可以繪製圖形了。

3. collections 模塊

Python 有一些很好的默認數據類型,但有時它們的行爲並不完全像你所期望的那樣。幸運的是,Python 標準庫提供了 collections 模塊,這個方便的附加組件提供了更多的數據類型。

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!")

4. dir

你是否知道如何查看 Python 對象並查看它都有哪些屬性?使用命令行:

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

當你通過交互方式來運行 Python,並動態地探索你正在使用的對象和模塊時,這一功能就非常有用了。

5. Emoji

如何打出 emoji 表情?

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

6. from future import

Python 如此廣受歡迎還有一個原因是它總是開發新版本。要知道,新版本意味着有新功能。但你不必害怕所用的版本過時了。這個__future__模塊可以讓你在現有版本上導入 Python 未來版本的功能。這一特徵就好像時間旅行機一樣,讓未來的東西穿越到現在來使用。

from __future__ import print_function

print("Hello World!")

7. geopy 模塊

對程序員來說,地理環境可能是一個具有挑戰性的領域。但是,有了geopy模塊,這一切就都變得簡單了。

pip install geopy

geopy 模塊是通過抽象出一系列不同的地理編碼服務的 API 來工作。它可以讓你獲得某一地點的完整街道地址、維度、精度甚至海拔高度。還有一個有用的距離類。它可以使用你喜歡的測量單位來計算兩個位置之間的距離。

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

print(location.address)
print(location.location)

8. howdoi

你有沒有遇到過這樣的困境:遇到編碼的問題忘記了以前見過的解決方案,或者需要檢查 StackOverflow,但又不想離開終端。

$pip install howdoi

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

但有一點要注意的是:howdoi 是從 StackOverflow 的熱門答案中抓取代碼,它提供的信息可能不是最有用的。

$howdoi exit vim

9. inspect 模塊

PYthon 的inspect 模塊對於理解幕後發生的事情非常有用。你甚至可以自己調用它的方法!如下所示的代碼段,使用了 inspect.getsource() 來打印自己的源代碼。它還使用了 inspect.getsource() 來打印定義它的模塊。最後一行代碼打印出自己的行號。

import inspect

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

當然,除去這些簡單的用途之外,inspect 模塊對於理解代碼的作用也非常有用。你也可以使用它來寫自編文檔代碼。

10. Jedi

Jedi 庫是一個自動完成和代碼分析的庫。它能夠使編寫代碼更爲快速、更爲高效。除非你正在開發自己的 IDE,否則你可能對使用 Jedi 作爲編輯器插件最感興趣。幸運的是,現在加載這個插件已經可以用了!不過,你可能已經用上Jedi 了。IPython 項目的代碼自動完成功能就是使用Jedi來實現的。

11. **kwargs

在學習任何語言的過程中,都會遇到許多里程碑。使用Python,理解神祕的 **kwargs 語法可能就是其中之一。dictionary 對象前面的雙星號允許您將該 dictionary的內容作爲命名參數傳遞給函數。dictionary的鍵是參數名,值是傳遞給函數的值。你甚至不需要叫它 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)

當你想編寫可以處理未預先定義的命名參數的函數時,這就非常有用了。

12. List Comprehensions

關於 Python 編程,我最喜歡的事情之一是它的列表生成式(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)

13. map

Python 是通過許多內置功能支持函數式變成。其中最有用的函數之一是map()函數,特別是這個函數與lambda 函數結合使用時。

x = [1,2,3]
y = map(lambda x:x+1,x)

#print out [2,3,4]
print(list(y))

在如上所示的代碼段中,map()對每個元素 x 都應用了一個簡單的 lambda 函數。它返回一個 map對象,這個對象可以轉換爲某些可迭代的對象,例如 listhtuple

14. newspaper3k 模塊

如果你還沒見過它,那你見到 Python 的 newspaper 模塊可不要被它震撼到了。這個模塊可以讓你從一系列領先的國際出版物中檢索新聞文章和相關的元數據。你可以檢索圖像、文本和作者姓名。如果你想爲你的項目使用 BeautifulSoup 或其他一些自己打造的 webscraping 庫,你可以用 $ pip install newspaper3k 爲你節省時間和精力。

15. Operator overloading

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

16. pprint

Python 的默認 print 函數可以完成打印作業。但是如果嘗試讓 Python 打印任何大型的嵌套對象,打印結果會非常難看。

這就要用到 Python 標準庫中的 pretty-print 模塊了。這個模塊能夠以易於閱讀的格式打印出複雜的結構化對象。這個模塊對於任何使用複雜數據結構的 Python 開發者來說都是必備的。

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

pprint.pprint(users)

17. Queue

Python 支持多線程,可以通過標準庫的 Queue 模塊來實現。這個模塊可以讓你實現隊列數據結構。這些數據結構允許你根據特定規則添加和檢索條目。“先進先出”(FIFO)隊列允許你按照添加對象的次序來檢索對象。“後進先出”(LIFO)隊列允許你首先訪問最近添加的對象。最後,優先級隊列允許你根據對象的排序次序來檢索對象。

18. repr

在 Python 中定義類或對象時,提供一種將該對象表示爲字符串的“官方”方法是很有用的。例如:

在這裏插入圖片描述
這使得代碼的調試變得更加容易。將其添加到你的類定義中,如下所示:
在這裏插入圖片描述

19. sh

Python 是一種很棒的腳本語言,但有時候使用標準的操作系統和子進程庫會讓人有點頭疼。

sh 庫提供了一個簡潔的替代方法。sh 庫允許你像普通函數一樣調用任何程序,這點對於自動化工作流和任務非常有用,所有這些都來自 Python 內部。

from sh import *

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

20. Type hints

Python 是一種動態類型的語言。在定義變量、函數、類等時,不需要指定數據類型。

這一特性讓開發者能夠快速開發項目。但是,很少有比簡單的輸入問題導致的運行時錯誤更煩人的事情了。

從Python 3.5開始,你就可以選擇在定義函數時提供type hintsl。

在這裏插入圖片描述
你可以這樣定義類型別名:
在這裏插入圖片描述
雖然定義類型別名不是強制性的,但是類型註釋可以讓你的代碼更容易理解。

它們還允許你使用類型檢查工具在運行時之前捕獲那些零散的 TypeErrors。如果你正在開發大型複雜的項目,那麼這很可能是值得一試的!

21. uuid

通過 Python 標準庫的 uuid 模塊,可以快速簡單地生成通用唯一 ID(或“uuid”)。

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

uuid 模塊會創建一個隨機的 128 位數字,幾乎可以肯定是唯一的。

實際上,可以生成超過 2¹²² 個可能 UUID,這一數字超過了5,000,000,000,000,000,000,000,000,000,000,000,000(數字 5 後面有 36 個數字 0)。

在給定的集合中找到重複的概率非常低。即使有一萬億的 uuid,重複存在的概率也遠遠小於十億分之一。

用兩行代碼就實現了,還是很不錯的。

22. Virtual environments

這可能是 Python 中我最喜歡的部分了。

你有可能同時會處理多個 Python 項目。然而不幸的是,有時兩個項目會依賴於相同依賴關係的不同版本。你在系統上都安裝了哪些版本的依賴關係呢?在命令行輸入如下內容:

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

現在,你可以在同一臺機器上安裝、運行Python不同的獨立版本。

23. wikipedia

Wikipedia 有一個很棒的 API,它允許用戶通過編程方式訪問無與倫比的、完全免費的知識和信息。

wikipedia 模塊使訪問這個 API 變得非常方便。

import wikipedia

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

與真實網站一樣,該模塊支持多種語言、頁面消歧、隨機頁面檢索,甚至還有 donate() 方法。

24. xkcd

幽默是 Python 語言的一個重要特徵——畢竟,它是以英國喜劇小品節目 Monty Python 的飛行馬戲團命名的。Python 的許多官方文檔都參考了該劇最著名的短劇。然而,這些幽默並不侷限於文檔,試一試下面的運行方式:

import antigravity

絕不改變,Python。永不改變。

25. YAML

YAML 代表的是“YAML Ain’t Markup Language”,它是一種數據格式化語言,是 JSON 的超集。與 JSON 不同,它可以存儲更復雜的對象並引用自己的元素。你還可以編寫註釋,使其特別適合於編寫配置文件。

PyYAML 模塊允許你在 Python 中使用 YAML。

然後導入到你的項目中:

import yaml

PyYAML 允許你存儲任何數據類型的 Python 對象,以及任何用戶定義類的實例。

zip

這是本文最後的一個技巧了,非常酷!你有沒有過需要從兩個列表中創建一個字典的想法呢?

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

zip() 內置函數接受許多可迭代對象並返回元組列表。每個元組根據對象的位置索引對其元素進行分組。

你還可以通過調用 *zip() 來“解壓縮”對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章