自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

24 個好用到爆的 Python 實用技巧

開發(fā) 后端
在這里,我嘗試以 A - Z 開頭的格式分享這些技巧中的一些,并且在本文中簡單介紹這些方法,如果你對其中一個或多個感興趣,你可以通過文末參考資料查看官方文檔。希望對你能有所幫助。

[[435031]]

在這里,我嘗試以 A - Z 開頭的格式分享這些技巧中的一些,并且在本文中簡單介紹這些方法,如果你對其中一個或多個感興趣,你可以通過文末參考資料查看官方文檔。希望對你能有所幫助。

A - Z 

all or any

Python 語言如此流行的眾多原因之一,是因為它具有很好的可讀性和表現(xiàn)力。

人們經(jīng)常開玩笑說 Python 是可執(zhí)行的偽代碼。當你可以像這樣寫代碼時,就很難反駁。 

  1. x = [True, True, False]  
  2. if any(x):  
  3.     print("至少有一個True")  
  4. if all(x):  
  5.     print("全是True")  
  6. if any(x) and not all(x):  
  7.     print("至少一個True和一個False") 

bashplotlib

你有沒有想過在控制臺中繪制圖形嗎?

Bashplotlib 是一個 Python 庫,他能夠幫助我們在命令行(粗曠的環(huán)境)中繪制數(shù)據(jù)。 

  1. # 模塊安裝  
  2. pip install bashplotlib  
  3. # 繪制實例  
  4. import numpy as np  
  5. from bashplotlib.histpgram import plot_hist  
  6. arr = np.ramdom.normal(size=1000loc=0scale=1 
  7. plot_hist(arr, bincount=50

collections

Python 有一些很棒的默認數(shù)據(jù)類型,但有時它們的行為并不完全符合你的期望。

幸運的是,Python 標準庫提供了 collections 模塊[1]。這個方便的附加組件為你提供了更多的數(shù)據(jù)類型。 

  1. from collections import OrderedDict, Counter  
  2. # 記住鍵的添加順序!  
  3. x = OrderedDict(a=1b=2c=3 
  4. # 統(tǒng)計每個字符出現(xiàn)的頻率  
  5. y = Counter("Hello World!") 

dir

有沒有想過如何查看 Python 對象內(nèi)部并查看它具有哪些屬性?在命令行中輸入: 

  1. dir()   
  2. dir("Hello World")   
  3. dir(dir) 

當以交互方式運行 Python 以及動態(tài)探索你正在使用的對象和模塊時,這可能是一個非常有用的功能。

emoji

emoji[3] 是日本在無線通信中所使用的視覺情感符號,繪指圖畫,文字指的則是字符,可用來代表多種表情,如笑臉表示笑、蛋糕表示食物等。在中國大陸,emoji通常叫做“小黃臉”,或者直稱emoji。 

  1. # 安裝模塊  
  2. pip install emoji  
  3. # 做個嘗試  
  4. from emoji import emojize  
  5. print(emojize(":thumbs_up:")) 

from __future__ import

Python 流行的結(jié)果之一,總是有新版本正在開發(fā)中。新版本意味著新功能 —— 除非你的版本已過時。

不過不要擔心。使用該__future__模塊[4]可以幫助你用Python的未來版本導(dǎo)入功能。從字面上看,這就像時間旅行、魔法或其他東西。 

  1. from __future__ import print_function 
  2. print("Hello World!") 

geogy

地理,對大多數(shù)程序員來說是一個具有挑戰(zhàn)性的領(lǐng)域。在獲取地理信息或者繪制地圖時,也會遇到不少問題。這個geopy 模塊[5]讓地理相關(guān)內(nèi)容變得非常容易。 

  1. pip install geopy 

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

還有一個有用的距離類。它以你偏好的測量單位計算兩個位置之間的距離。 

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

howdoi

當你使用terminal終端編程時,通過在遇到問題后會在StackOverflow上搜索答案,完后會回到終端繼續(xù)編程,此時有時會不記得你之前查到的解決方案,此時需要重新查看StackOverflow,但又不想離開終端,那么此時你需要用到這個有用的命令行工具howdoi[6]。 

  1. pip install howdoi 

無論你有什么問題,都可以問它,它會盡力回復(fù)。 

  1. howdoi vertical align css  
  2. howdoi for loop in java  
  3. howdoi undo commits in git 

但請注意——它會從 StackOverflow 的最佳答案中抓取代碼。它可能并不總是提供最有用的信息......

  1. howdoi exit vim 

inspect

Python 的inspect模塊[7]非常適合了解幕后發(fā)生的事情。你甚至可以調(diào)用它自己的方法!

下面的代碼示例inspect.getsource() 用于打印自己的源代碼。 inspect.getmodule() 還用于打印定義它的模塊。

最后一行代碼打印出它自己的行號。 

  1. import inspect  
  2. print(inspect.getsource(inspect.getsource))  
  3. print(inspect.getmodule(inspect.getmodule))  
  4. print(inspect.currentframe().f_lineno) 

當然,除了這些微不足道的用途,inspect 模塊可以證明對理解你的代碼在做什么很有用。你還可以使用它來編寫自文檔化代碼。

Jedi

Jedi 庫是一個自動完成和代碼分析庫。它使編寫代碼更快、更高效。

除非你正在開發(fā)自己的 IDE,否則你可能對使用Jedi [8]作為編輯器插件比較感興趣。幸運的是,這已經(jīng)有可用的負載!

**kwargs

在學習任何語言時,都會有許多里程碑。使用 Python 并理解神秘的**kwargs語法可能算作一個重要的里程碑。

字典對象前面的雙星號**kwargs[9]允許你將該字典的內(nèi)容作為命名參數(shù)傳遞給函數(shù)。

字典的鍵是參數(shù)名稱,值是傳遞給函數(shù)的值。你甚至不需要調(diào)用它kwargs! 

  1. dictionary = {"a": 1, "b": 2}  
  2. def someFunction(a, b):  
  3.     print(a + b)  
  4.     return  
  5. # 這些做同樣的事情:  
  6. someFunction(**dictionary)  
  7. someFunction(a=1b=2

當你想編寫可以處理未預(yù)先定義的命名參數(shù)的函數(shù)時,這很有用。

列表(list)推導(dǎo)式

關(guān)于 Python 編程,我最喜歡的事情之一是它的列表推導(dǎo)式[10]。

這些表達式可以很容易地編寫非常順暢的代碼,幾乎與自然語言一樣。 

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

map

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

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

在上面的示例中,map()將一個簡單的 lambda 函數(shù)應(yīng)用于x. 它返回一個映射對象,該對象可以轉(zhuǎn)換為一些可迭代對象,例如列表或元組。

newspaper3k

如果你還沒有看過它,那么準備好被Python newspaper module [12]模塊震撼到。它使你可以從一系列領(lǐng)先的國際出版物中檢索新聞文章和相關(guān)的元數(shù)據(jù)。你可以檢索圖像、文本和作者姓名。它甚至有一些內(nèi)置的 NLP 功能[13]。

因此,如果你正在考慮在下一個項目中使用 BeautifulSoup 或其他一些 DIY 網(wǎng)頁抓取庫,使用本模塊可以為你自己節(jié)省不少時間和精力。 

  1. pip install newspaper3k 

Operator overloading

Python 提供對運算符重載的[14]支持,這是讓你聽起來像一個合法的計算機科學家的術(shù)語之一。

這實際上是一個簡單的概念。有沒有想過為什么 Python 允許你使用+運算符來添加數(shù)字以及連接字符串?這就是操作符重載的作用。

你可以定義以自己的特定方式使用 Python 的標準運算符符號的對象。并且你可以在與你正在使用的對象相關(guān)的上下文中使用它們。 

  1. class Thing:  
  2.     def __init__(self, value):  
  3.         self.__value = value  
  4.     def __gt__(self, other):  
  5.         return self.__value > other.__value  
  6.     def __lt__(self, other):  
  7.         return self.__value < other.__value  
  8. something = Thing(100)  
  9. nothing = Thing(0)  
  10. # True  
  11. something > nothing  
  12. # False  
  13. something < nothing  
  14. # Error  
  15. something + nothing 

pprint

Python 的默認print函數(shù)完成了它的工作。但是如果嘗試使用print函數(shù)打印出任何大的嵌套對象,其結(jié)果相當難看。這個標準庫的漂亮打印模塊pprint[15]可以以易于閱讀的格式打印出復(fù)雜的結(jié)構(gòu)化對象。

這算是任何使用非平凡數(shù)據(jù)結(jié)構(gòu)的 Python 開發(fā)人員的必備品。 

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

Queue

Python 標準庫的 Queue 模塊實現(xiàn)支持多線程。這個模塊讓你實現(xiàn)隊列數(shù)據(jù)結(jié)構(gòu)。這些是允許你根據(jù)特定規(guī)則添加和檢索條目的數(shù)據(jù)結(jié)構(gòu)。

“先進先出”(FIFO)隊列讓你可以按添加順序檢索對象。“后進先出”(LIFO) 隊列讓你可以首先訪問最近添加的對象。

最后,優(yōu)先隊列讓你可以根據(jù)對象的排序順序檢索對象。

這是一個如何在 Python 中使用隊列Queue[16]進行多線程編程的示例。

__repr__

在 Python 中定義類或?qū)ο髸r,提供一種將該對象表示為字符串的“官方”方式很有用。例如: 

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

這使得調(diào)試代碼更加容易。將其添加到你的類定義中,如下所示: 

  1. class someClass:   
  2.     def __repr__(self):   
  3.         return "<some description here> 
  4. someInstance = someClass()  
  5. # 打印 <some description here>  
  6. print(someInstance) 

sh

Python 是一種很棒的腳本語言。有時使用標準的 os 和 subprocess 庫可能有點頭疼。

該SH庫[17]讓你可以像調(diào)用普通函數(shù)一樣調(diào)用任何程序——對于自動化工作流和任務(wù)非常有用。 

  1. import sh  
  2. sh.pwd()  
  3. sh.mkdir('new_folder')  
  4. sh.touch('new_file.txt')  
  5. sh.whoami() 
  6. sh.echo('This is great!')

Type hints

Python 是一種動態(tài)類型語言。定義變量、函數(shù)、類等時不需要指定數(shù)據(jù)類型。這允許快速的開發(fā)時間。但是,沒有什么比由簡單的輸入問題引起的運行時錯誤更煩人的了。

從 Python 3.5[18] 開始,你可以選擇在定義函數(shù)時提供類型提示。 

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

你還可以定義類型別名。 

  1. from typing import List  
  2. Vector = List[float]  
  3. Matrix = List[Vector]  
  4. def addMatrix(a : Matrix, b : Matrix) -> Matrix:  
  5.   result = []  
  6.   for i,row in enumerate(a):  
  7.     result_row =[]  
  8.     for j, col in enumerate(row):  
  9.       result_row += [a[i][j] + b[i][j]]  
  10.     result += [result_row]  
  11.   return result  
  12. x = [[1.0, 0.0], [0.0, 1.0]]  
  13. y = [[2.0, 1.0], [0.0, -2.0]]  
  14. z = addMatrix(x, y) 

盡管不是強制性的,但類型注釋可以使你的代碼更易于理解。

它們還允許你使用類型檢查工具,在運行前捕獲那些雜散的 TypeError。如果你正在處理大型、復(fù)雜的項目,這是很有用的!

uuid

通過Python 標準庫的 uuid 模塊[19]生成通用唯一 ID(或“UUID”)的一種快速簡便的方法。 

  1. import uuid  
  2. user_id = uuid.uuid4()  
  3. print(user_id) 

這將創(chuàng)建一個隨機的 128 位數(shù)字,該數(shù)字幾乎肯定是唯一的。事實上,可以生成超過 2¹²² 種可能的 UUID。這超過了五個十進制 (或 5,000,000,000,000,000,000,000,000,000,000,000,000)。

在給定的集合中發(fā)現(xiàn)重復(fù)的概率極低。即使有一萬億個 UUID,重復(fù)存在的可能性也遠低于十億分之一。

Virtual environments

你可能同時在多個 Python 項目上工作。不幸的是,有時兩個項目將依賴于相同依賴項的不同版本。你在你的系統(tǒng)上安裝了什么?

幸運的是,Python支持對 虛擬環(huán)境[20] 的讓你可以兩全其美。從命令行: 

  1. python -m venv my-project   
  2. source my-project/bin/activate   
  3. pip install all-the-modules 

現(xiàn)在,你可以在同一臺機器上運行 Python 的獨立版本和安裝。

wikipedia

維基百科有一個很棒的 API,它允許用戶以編程方式訪問無與倫比的完全免費的知識和信息。在wikipedia模塊[21]使訪問該API非常方便。 

  1. import wikipedia  
  2. result = wikipedia.page('freeCodeCamp') 
  3. print(result.summary)  
  4. for link in result.links:  
  5.     print(link) 

和真實站點一樣,該模塊提供了多語言支持、頁面消歧、隨機頁面檢索,甚至還有一個donate()方法。

xkcd

幽默是 Python 語言的一個關(guān)鍵特征,它是以英國喜劇小品劇Python飛行馬戲團[22]命名的。Python 的許多官方文檔都引用了該節(jié)目最著名的草圖。不過,Python 的幽默并不僅限于文檔。試試運行下面的行: 

  1. import antigravity 

YAML

YAML[23]指的是 “ 非標記語言” 。它是一種數(shù)據(jù)格式化語言,是 JSON 的超集。

與 JSON 不同,它可以存儲更復(fù)雜的對象并引用它自己的元素。你還可以編寫注釋,使其特別適合編寫配置文件。該PyYAML模塊[24]可讓你使用YAML使用Python。

安裝并然后導(dǎo)入到你的項目中: 

  1. pip install pyyaml  
  2. import yaml 

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

zip

壓軸出場的也是很棒的一個模塊。你曾經(jīng)遇到過需要從兩個列表中形成字典嗎? 

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

該zip()內(nèi)置函數(shù)需要一系列可迭代的對象,并返回一個元組列表中。每個元組按位置索引對輸入對象的元素進行分組。

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

寫在最后

Python 是一種非常多樣化且發(fā)展良好的語言,因此肯定會有許多我沒有考慮的功能。如果你想了解更多的python模塊,可以參考awesome-python[25]。 

責任編輯:龐桂玉 來源: 菜鳥學Python
相關(guān)推薦

2023-04-26 00:34:36

Python技巧程序員

2021-12-11 23:13:16

Python語言技巧

2024-05-22 09:29:43

2024-09-11 16:30:55

Python函數(shù)編程

2024-11-26 14:18:44

Python代碼技巧

2023-11-28 12:07:06

Python代碼

2024-03-27 14:06:58

Python代碼開發(fā)

2020-07-11 09:45:33

Python編程語言開發(fā)

2012-03-07 14:46:29

2019-11-25 10:12:59

Python技巧工具

2022-02-24 10:48:01

Pycharm插件

2024-07-19 10:31:15

2010-01-11 14:30:33

全千兆交換機

2009-09-04 10:27:28

Linux實用技巧linux操作系統(tǒng)linux

2022-03-23 09:18:10

Git技巧Linux

2009-12-21 15:50:39

2023-07-24 07:11:43

2024-01-08 18:05:19

PyCharm技巧功能

2021-04-12 15:54:45

Android 開發(fā)技巧

2025-03-03 00:15:00

JavaScript開發(fā)效率
點贊
收藏

51CTO技術(shù)棧公眾號