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

這些Python代碼技巧,你肯定還不知道

開發(fā) 開發(fā)工具 后端
被人工智能捧紅的 Python 已是一種發(fā)展完善且非常多樣化的語(yǔ)言,其中肯定有一些你尚未發(fā)現(xiàn)的功能。本文或許能夠讓你學(xué)到一些新技巧。

Python 是世界上***、熱門的編程語(yǔ)言之一,原因很多,比如:

  • 易于學(xué)習(xí)
  • 超高的通用性
  • 具備大量模塊和庫(kù)

本文將分享一些使用 Python 的技巧,順序按照 A-Z 排列。

[[242301]]

all or any

Python 非常受歡迎的原因之一是其可讀性和表達(dá)性。

人們還經(jīng)常把 Python 笑稱為「可執(zhí)行偽碼(executable pseudocode)」。但是,當(dāng)你可以編寫這樣的代碼時(shí),很難去反駁這種言論:

  1. x = [True, True, False] 
  2. if any(x): 
  3.     print("At least one True") 
  4. if all(x): 
  5.     print("Not one False") 
  6. if any(x) and not all(x): 
  7.     print("At least one True and one False") 

bashplotlib

想在控制臺(tái)中繪圖嗎?

  1. $ pip install bashplotlib 

使用上面的行,即可在控制臺(tái)中繪圖。

collections

Python 有一些很棒的默認(rèn)數(shù)據(jù)類型,但有時(shí)候它們可能不會(huì)盡如你意。

不過(guò),Python 標(biāo)準(zhǔn)庫(kù)提供了 collections 模塊。這個(gè)方便的附加組件可以為你提供更多數(shù)據(jù)類型。

collections 模塊:https://docs.python.org/3/library/collections.html

  1. from collections import OrderedDict, Counter 
  2. # Remembers the order the keys are added! 
  3. x = OrderedDict(a=1b=2c=3
  4. # Counts the frequency of each character 
  5. y = Counter("Hello World!") 

dir

你是否想過(guò)如何查看 Python 對(duì)象內(nèi)部及其具有哪些屬性?

輸入以下命令行:

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

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

想要了解更多,點(diǎn)這里:https://docs.python.org/3/library/functions.html#dir

emoji

是的,真的有。請(qǐng)點(diǎn)擊這里:https://pypi.org/project/emoji/

  1. $ pip install emoji 

別以為我不知道你會(huì)偷偷試它→→

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

from __future__ import

Python 流行的一個(gè)結(jié)果是,總有新版本正在開發(fā)中。新版本意味著新功能——除非你的版本已經(jīng)過(guò)時(shí)。

不過(guò),別擔(dān)心。__ future__模塊允許用戶導(dǎo)入新版 Python 的功能。這簡(jiǎn)直就像時(shí)間旅行,或者魔法什么的。

__ future__模塊:https://docs.python.org/2/library/*future*.html

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

geopy

地理(Geography)對(duì)于程序員來(lái)說(shuō)可能是一個(gè)具有挑戰(zhàn)性的領(lǐng)域。但是 geopy 模塊讓它變得異常簡(jiǎn)單。

geopy 模塊:https://geopy.readthedocs.io/en/latest/

  1. $ pip install geopy 

它通過(guò)抽取一系列不同地理編碼服務(wù)的 API 來(lái)工作,使用戶獲取一個(gè)地方的完整街道地址、緯度、經(jīng)度,甚至海拔高度。

另外一個(gè)有用的功能是距離:它可以用你喜歡的度量單位計(jì)算出兩個(gè)位置之間的距離。

  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

陷入編碼問(wèn)題,卻不記得以前見(jiàn)過(guò)的解決方案?需要檢查 StackOverflow,但不想離開終端?

那么你需要這個(gè)有用的命令行工具:https://github.com/gleitz/howdoi。

  1. $ pip install howdoi 

無(wú)論你有什么問(wèn)題都可以問(wèn)它,它會(huì)盡力回答。

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

但是請(qǐng)注意——它會(huì)從 StackOverflow 的***票答案中抓取代碼。也就是說(shuō)它提供的信息并非總是有用……

  1. $ howdoi exit vim 

inspect

Python 的 inspect 模塊非常有助于理解問(wèn)題背后的詳情。你甚至可以在 inspect 模塊上調(diào)用其方法!

inspect 模塊:https://docs.python.org/3/library/inspect.html

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

***一行代碼打印出自己的行號(hào)。

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

當(dāng)然,除了這些瑣碎的用途之外,inspect 模塊還能幫助你理解代碼正在做的事。你還可以用它編寫自文檔化代碼。

Jedi

Jedi 庫(kù)是一個(gè)自動(dòng)完成和代碼分析的庫(kù)。它使代碼編寫變得更快、效果更高。

除非你正在開發(fā)自己的 IDE,否則你肯定會(huì)對(duì)使用 Jedi 庫(kù)作為編輯插件很感興趣。

Jedi:https://jedi.readthedocs.io/en/latest/docs/usage.html

你可能已經(jīng)在使用 Jedi 了。IPython 項(xiàng)目就使用 Jedi 實(shí)現(xiàn)代碼自動(dòng)完成功能。

**kwargs

學(xué)習(xí)任何語(yǔ)言時(shí)都會(huì)遇到很多里程碑。對(duì)于 Python 來(lái)說(shuō),理解神秘的**kwargs 語(yǔ)法可能算是其中之一。

詞典對(duì)象前面的雙星號(hào)可以讓你把該詞典的內(nèi)容作為命名參數(shù)輸入到函數(shù)中。

詞典的秘鑰是參數(shù)名,值是傳遞給函數(shù)的值。你甚至不需要稱它為 kwargs!

  1. dictionary = {"a": 1, "b": 2} 
  2. def someFunction(a, b): 
  3.     print(a + b) 
  4.     return 
  5. # these do the same thing: 
  6. someFunction(**dictionary) 
  7. someFunction(a=1b=2

當(dāng)你想編寫能夠處理事先未定義的命名參數(shù)的函數(shù)時(shí),這個(gè)很有用。

列表推導(dǎo)式(List comprehensions)

我最喜歡 Python 編程的原因之一是它的列表推導(dǎo)式

(https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions)。

這些表達(dá)式使得編寫干凈易讀的代碼變得很容易,那些代碼讀起來(lái)幾乎像自然語(yǔ)言一樣。

關(guān)于它們的更多使用信息請(qǐng)查看:

https://www.learnpython.org/en/List_Comprehensions

  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 通過(guò)許多內(nèi)置功能支持函數(shù)式編程。map() 函數(shù)是最有用的函數(shù)之一——特別是當(dāng)它與 lambda 函數(shù)結(jié)合使用時(shí)。

lambda 函數(shù):

https://docs.python.org/3/tutorial/controlflow.html#lambda-expressions

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

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

newspaper3k

如果你之前沒(méi)有見(jiàn)過(guò)它,那么我建議你先查看:https://pypi.org/project/newspaper3k/。

它可以幫助你從大量***國(guó)際出版物中檢索到新聞文章和相關(guān)元數(shù)據(jù)。你可以檢索圖像、文本和作者名。

它還有一些內(nèi)置的 NLP 功能。

地址:

https://newspaper.readthedocs.io/en/latest/user_guide/quickstart.html#performing-nlp-on-an-article

如果你想在下一個(gè)項(xiàng)目中使用 BeautifulSoup 或其它 DIY 網(wǎng)頁(yè)抓取庫(kù),那么不如使用$ pip install newspaper3k,既省時(shí)又省事,何樂(lè)而不為呢?

運(yùn)算符重載(Operator overloading)

Python 支持運(yùn)算符重載。

它實(shí)際上是一個(gè)簡(jiǎn)單的概念。你有沒(méi)有想過(guò)為什么 Python 允許用戶使用 + 運(yùn)算符來(lái)將數(shù)字相加,并級(jí)聯(lián)字符串?這就是運(yùn)算符重載在發(fā)揮作用。

你可以使用 Python 的標(biāo)準(zhǔn)運(yùn)算符號(hào)來(lái)定義對(duì)象,這樣你可以在與這些對(duì)象相關(guān)的語(yǔ)境中使用它們。

  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 的默認(rèn) print 函數(shù)就可以實(shí)現(xiàn)打印功能。但如果嘗試打印較大的嵌套對(duì)象,就會(huì)發(fā)現(xiàn)打印結(jié)果很丑。

這時(shí) Python 標(biāo)準(zhǔn)庫(kù)的 pretty printer 模塊就可以發(fā)揮作用了。該模塊可以將復(fù)雜的結(jié)構(gòu)化對(duì)象以一種易讀的格式打印出來(lái)。

pretty printer 模塊:https://docs.python.org/3/library/pprint.html

Python 開發(fā)者的必備技能之一就是處理復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。

  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 支持多線程,而這是由 Python 標(biāo)準(zhǔn)庫(kù)的 Queue 模塊支持的。

該模塊允許用戶實(shí)現(xiàn)隊(duì)列(queue)數(shù)據(jù)結(jié)構(gòu)。隊(duì)列數(shù)據(jù)結(jié)構(gòu)允許用戶根據(jù)特定的規(guī)則添加和檢索條目。

『First in, first out』 (FIFO) 隊(duì)列允許用戶按照對(duì)象被添加的順序來(lái)檢索對(duì)象?!篖ast in, first out』 (LIFO) 隊(duì)列允許用戶首先訪問(wèn)***添加的對(duì)象。

***,優(yōu)先級(jí)隊(duì)列(priority queue)允許用戶根據(jù)對(duì)象對(duì)應(yīng)的優(yōu)先級(jí)類別來(lái)檢索對(duì)象。

如何使用 queue 在 Python 中實(shí)現(xiàn)多線程編程,示例詳見(jiàn):

https://www.tutorialspoint.com/python3/python_multithreading.htm。

__repr__

在 Python 中定義一個(gè)類別或?qū)ο髸r(shí),以「官方」方式將對(duì)象表示為字符串很有用。例如:

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

這使代碼 debug 變得簡(jiǎn)單很多。將字符串添加到類別定義,如下所示:

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

sh

Python 是一種偉大的腳本語(yǔ)言,不過(guò)有時(shí)使用標(biāo)準(zhǔn) os 和 subprocess 庫(kù)會(huì)有點(diǎn)棘手。

sh 庫(kù)提供了一種不錯(cuò)的替代方案。

sh 庫(kù):http://amoffat.github.io/sh/

該庫(kù)允許用戶像使用普通函數(shù)一樣調(diào)用任意程序,這對(duì)自動(dòng)化工作流和任務(wù)非常有用。

  1. from sh import * 
  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 是動(dòng)態(tài)語(yǔ)言。在定義變量、函數(shù)、類別等時(shí)無(wú)需指定數(shù)據(jù)類型。

這有利于縮短開發(fā)周期。但是,簡(jiǎn)單的類型錯(cuò)誤(typing issue)導(dǎo)致的運(yùn)行時(shí)錯(cuò)誤真的太煩了。

從 Python 3.5 版本開始,用戶可以選擇在定義函數(shù)時(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) 

盡管非強(qiáng)制,但類型注釋可以使代碼更易理解。

它們還允許你在運(yùn)行之前使用類型檢查工具捕捉 TypeError。在進(jìn)行大型復(fù)雜項(xiàng)目時(shí)執(zhí)行此類操作是值得的。

uuid

生成通用唯一標(biāo)識(shí)符(Universally Unique ID,UUID)的一種快速簡(jiǎn)單方法就是使用 Python 標(biāo)準(zhǔn)庫(kù)的 uuid 模塊。

uuid 模塊:https://docs.python.org/3/library/uuid.html

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

這創(chuàng)建了一個(gè)隨機(jī)化后的 128 比特?cái)?shù)字,該數(shù)字幾乎必然是唯一的。

事實(shí)上,可以生成 2¹²²可能的 UUID。這個(gè)數(shù)字超過(guò)了

5,000,000,000,000,000,000,000,000,000,000,000,000。

在給定集合中找出重復(fù)數(shù)字的可能性極低。即使有一萬(wàn)億 UUID,重復(fù)數(shù)字存在的概率也遠(yuǎn)遠(yuǎn)低于十億分之一。

虛擬環(huán)境(Virtual environment)

這可能是 Python 中我最喜歡的事物了。

你可能同時(shí)處理多個(gè) Python 項(xiàng)目。不幸的是,有時(shí)候兩個(gè)項(xiàng)目依賴于相同依賴項(xiàng)的不同版本。那你要安裝哪個(gè)版本呢?

幸運(yùn)的是,Python 支持虛擬環(huán)境,這使得用戶能夠充分利用兩種環(huán)境。見(jiàn)下列行:

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

現(xiàn)在你在一臺(tái)機(jī)器上具備獨(dú)立的多個(gè) Python 版本了。問(wèn)題解決!

wikipedia

Wikipedia 擁有一個(gè)很棒的 API,允許用戶以編程方式訪問(wèn)巨大體量的免費(fèi)知識(shí)和信息。

wikipedia 模塊使得訪問(wèn)該 API 非常便捷。

Wikipedia 模塊:https://wikipedia.readthedocs.io/en/latest/quickstart.html

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

和真實(shí)的維基百科網(wǎng)站類似,該模塊支持多種語(yǔ)言、頁(yè)面消歧、隨機(jī)頁(yè)面檢索,甚至還具備 donate() 方法。

xkcd

humour 是 Python 語(yǔ)言的一個(gè)關(guān)鍵特征,其名稱來(lái)自英國(guó)喜劇片《蒙提·派森的飛行馬戲團(tuán)》(Monty Python and the Flying Circus)。Python 的很多官方文檔引用了該喜劇片***的劇情。

幽默感并不限于文檔。試著運(yùn)行下列行:

  1. import antigravity 

將打開 xkcd 畫的 Python 漫畫。不要改變這一點(diǎn),Python。不要改變。

YAML

YAML 代表 『YAML Ain』t Markup Language』。它是一種數(shù)據(jù)格式語(yǔ)言,是 JSON 的超集。

與 JSON 不同,它可以存儲(chǔ)更復(fù)雜的對(duì)象并引用自己的元素。你還可以編寫注釋,使其尤其適用于編寫配置文件。

PyYAML 模塊(https://pyyaml.org/wiki/PyYAMLDocumentation)可以讓你在 Python 中使用 YAML。安裝:

  1. $ pip install pyyaml 

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

  1. import yaml 

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

zip

給你支***一招,非??帷_€在用兩個(gè)列表來(lái)組成一部詞典嗎?

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

zip() 內(nèi)置函數(shù)使用多個(gè)可迭代對(duì)象作為輸入并返回元組列表。每個(gè)元組按位置索引對(duì)輸入對(duì)象的元素進(jìn)行分組。

你也可以通過(guò)調(diào)用*zip() 來(lái)「解壓」對(duì)象。

原文鏈接:https://medium.freecodecamp.org/an-a-z-of-useful-python-tricks-b467524ee747

【本文是51CTO專欄機(jī)構(gòu)“機(jī)器之心”的原創(chuàng)文章,微信公眾號(hào)“機(jī)器之心( id: almosthuman2014)”】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來(lái)源: 51CTO專欄
相關(guān)推薦

2018-09-03 16:05:03

編程語(yǔ)言Python代碼技巧

2022-05-05 12:02:45

SCSS函數(shù)開發(fā)

2023-11-15 08:22:42

Java開發(fā)小技巧

2020-12-14 07:51:16

JS 技巧虛值

2023-09-08 08:23:29

Servlet程序MVC

2021-02-03 08:24:32

JavaScript技巧經(jīng)驗(yàn)

2017-10-16 13:30:28

windows 10技巧輸入法

2015-07-13 08:49:54

2020-10-28 08:06:09

Vue3框架數(shù)據(jù)

2016-07-22 17:55:07

云計(jì)算

2021-10-19 14:49:49

CSS前端

2021-08-30 07:49:33

索引ICP Mysql

2023-12-21 14:40:09

Python編程語(yǔ)言

2020-01-29 19:40:36

Python美好,一直在身邊Line

2021-01-05 11:22:58

Python字符串代碼

2021-12-27 14:12:44

iOS蘋果系統(tǒng)

2022-07-17 06:53:24

微服務(wù)架構(gòu)

2020-02-21 14:55:02

Python代碼字符串

2020-08-11 11:20:49

Linux命令使用技巧

2020-06-03 08:53:40

CSS偽類 JS
點(diǎn)贊
收藏

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