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

你想要的 Python 編程技巧,我都給你整理好了

新聞 后端
Python 是我作為數(shù)據(jù)科學(xué)家日常生活中不可或缺的一部分。在學(xué)習(xí) Python 的過(guò)程中,我領(lǐng)悟到了很多的方法和技巧。

 Python 是這個(gè)世界上***的按需編程語(yǔ)言之一。其中包含很多原因:

  • 易學(xué)習(xí) 

  • 應(yīng)用范圍廣 

  • 具備非常多的模型和庫(kù)

Python 是我作為數(shù)據(jù)科學(xué)家日常生活中不可或缺的一部分。在學(xué)習(xí) Python 的過(guò)程中,我領(lǐng)悟到了很多的方法和技巧。

在這里,我嘗試用 A-Z 的格式來(lái)做一些分享。

大部分的技巧是我在日常工作中使用的或是偶然發(fā)現(xiàn)的。 其中一些是在瀏覽 Python Standard Library docs 找到的。其他的一些是我在 PyPi 中搜索找到的。

但事實(shí)上,還是應(yīng)該歸功于 awesome-python.com ,因?yàn)槲以谏厦嬲业搅怂膫€(gè)或五個(gè)實(shí)用的技巧。這是數(shù)百個(gè)有趣的 Python 工具和模塊。非常值得瀏覽以獲取靈感。

all or any 

Python 受歡迎的眾多原因之一是它的可讀性和易表達(dá)性。

人們經(jīng)常笑稱(chēng) Python 是可執(zhí)行的偽代碼。但當(dāng)你寫(xiě)出下述代碼,很難去反駁這種言論。

  1. x = [TrueTrueFalseif 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

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

  1. $ pip install bashplotlib 

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

集合

Python 內(nèi)置默認(rèn)的數(shù)據(jù)類(lèi)型,但有時(shí)它們的使用效果會(huì)不盡如人意。

幸運(yùn)的是,Python 的標(biāo)準(zhǔn)庫(kù)提供了 collections 模塊,這個(gè)方便的附加庫(kù)提供了更多的數(shù)據(jù)類(lèi)型。

  1. from collections import OrderedDict, Counter x = OrderedDict(a=1, b=2, c=3) y = Counter("Hello World!"

dir

你是否曾經(jīng)有過(guò)深入 Python 對(duì)象內(nèi)部并且觀察它具備哪些屬性的想法呢?

輸入下述命令行:

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

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

emoji

Python 包含 emoji 模塊,在這里!

  1. $ pip install emoji 

別以為我不知道你會(huì)偷偷下載...

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

from _future_import

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

不過(guò)別擔(dān)心。_future_module 允許用戶通過(guò)函數(shù)導(dǎo)入新版本 Python 的功能。這就像是時(shí)間旅行,或是奇異魔法之類(lèi)......

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

為什么不導(dǎo)入花括號(hào)呢?

geopy 

地理知識(shí)對(duì)于程序猿來(lái)說(shuō)是非常大的挑戰(zhàn)是,但是 geopy 模塊讓它變得更簡(jiǎn)單。

  1. $ pip install geopy 

它通過(guò)提取不同的地理編碼服務(wù) API 進(jìn)行工作,以此能獲取一個(gè)地方的完整街道地址,經(jīng)度,緯度,甚至是海拔高度。

geopy 還提供一個(gè)非常有用的距離類(lèi)。它支持用戶喜歡的度量方式來(lái)計(jì)算兩個(gè)地點(diǎn)之間的距離。

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

howdoi 

受困于編程問(wèn)題并且不記得之前看到過(guò)的解決方法?用戶需要使用 StackOverflow ,但是不想離開(kāi)終端?

那么需要使用這個(gè)非常使用的命令行工具 howdoi 

  1. $ pip install howdoi 

無(wú)論你有什么問(wèn)題,它都會(huì)幫你解答。

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

但是請(qǐng)注意,它會(huì)從 StackOverflow 的***票答案中抓取代碼,這意味著它的回答并不總是最有用的。

  1. $ howdoi exit vim 

inspect 

Python 的 inspects 模塊對(duì)于理解背后的原理是非常有幫助的。用戶甚至可以在 inspect 模塊上調(diào)用其方法!

下述代碼示例使用

inspect.getsource()   

來(lái)打印它的源代碼。同時(shí)它也使用

inspect.getmodule()   

來(lái)打印定義它的模塊。

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

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

當(dāng)然,除了這些瑣碎的用途之外 , inspect 模塊還支持理解用戶代碼正在做什么。用戶還可以利用 Inspect 模塊編寫(xiě)自文檔化代碼。

Jedi

Jedi 是一個(gè)自動(dòng)完成以及代碼分析庫(kù)。它使得編寫(xiě)代碼更加快速以及更高產(chǎn)。

除非用戶正在自主開(kāi)發(fā) IDE,否則肯定會(huì)對(duì)使用 Jedi 作為編輯器插件非常感興趣。幸運(yùn)的是,已經(jīng)開(kāi)放下載。

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

**kwargs

在學(xué)習(xí)任何編程語(yǔ)言時(shí),一路上會(huì)遇到很多里程碑。在學(xué)習(xí) Python 時(shí),理解神秘的 **kwargs 是其中一塊里程碑。

字典前面的雙星號(hào)支持把字典的內(nèi)容作為命名參數(shù)傳遞給函數(shù)。

字典的秘鑰是參數(shù)名,值是傳遞給函數(shù)的值,用戶甚至都不需要稱(chēng)它為 kwargs

  1. dictionary = {"a"1"b"2def someFunction(a, b):     print(a + b)     return someFunction(**dictionary) someFunction(a=1, b=2

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

列表解析

在python編程中其中一個(gè)我喜歡的東西是它的列表解析 
這些表達(dá)式可以很容易的寫(xiě)出非常簡(jiǎn)潔的代碼,使其讀起來(lái)就像自然語(yǔ)言一樣 
你可以了解更多關(guān)于如何使用它

  1. 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) 

map

Python通過(guò)許多內(nèi)置功能支持函數(shù)式編程,其中最有用的是 map()

特別是結(jié)合lambda函數(shù)使用時(shí)。

  1. x = [123] y = map(lambda x : x + 1 , x) print(list(y)) 

在上面的例子中 map() 對(duì)X中的每個(gè)元素應(yīng)用了簡(jiǎn)單的lambda函數(shù)

它返回一個(gè)map object類(lèi)型,可以被轉(zhuǎn)換成一些可迭代對(duì)象,例如列表或元組

newspaper3k

如果你之前沒(méi)有見(jiàn)過(guò)newspaper3k的話,那么請(qǐng)準(zhǔn)備好被這個(gè)Python的newspaper模塊所震撼吧

newspaper模塊允許你從一系列國(guó)際領(lǐng)先的出版物中檢索新聞文章和相關(guān)的元數(shù)據(jù)。你可以檢索圖像,文本和作者姓名。

newspaper模塊甚至有一些內(nèi)置的NLP功能。

因此,如果你想在下一個(gè)項(xiàng)目中使用BeautifulSoup或其他DIY網(wǎng)頁(yè)查詢(xún)庫(kù),節(jié)省自己的時(shí)間和精力,并改為

  1. $ pip install newspaper3k 

Operator overloading

Python 支持操作符重載,這術(shù)語(yǔ)讓你聽(tīng)上去像是計(jì)算機(jī)科學(xué)家。

事實(shí)上這是個(gè)非常普通的概念。是否曾經(jīng)想過(guò)為什么 Python 支持使用 + 運(yùn)算符來(lái)對(duì)數(shù)值進(jìn)行相加以及連接字符串?這就是實(shí)際的操作符重載。

用戶可以按照自己特定的方式來(lái)定義使用 Python 標(biāo)準(zhǔn)運(yùn)算符符號(hào)對(duì)象,這使得用戶可以在對(duì)象相關(guān)的上下文中使用它們。

  1. 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) something > nothing something < nothing something + nothing 

pprint

Python 的默認(rèn)函數(shù) print 可以實(shí)現(xiàn)打印功能,但是如果打印的嵌套對(duì)象體量比較大,就會(huì)發(fā)現(xiàn)打印結(jié)果不太美觀。

這時(shí)就需要用到標(biāo)準(zhǔn)庫(kù)pretty-print 模塊。它能用可讀性強(qiáng)的方式打印出復(fù)雜結(jié)構(gòu)的對(duì)象。

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

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

Queue

Python 支持多線程,這可以通過(guò)標(biāo)準(zhǔn)庫(kù)的 Queue 模塊來(lái)實(shí)現(xiàn)。Queue 模塊讓用戶可以實(shí)現(xiàn)隊(duì)列數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)允許用戶通過(guò)特定的方法添加和檢索數(shù)據(jù)。

“First in ,first out ”(或 FIFO) 隊(duì)列數(shù)據(jù)結(jié)構(gòu)允許用戶依據(jù)對(duì)象添加的順序檢索對(duì)象,“Last in,first out”(LIFO)數(shù)據(jù)結(jié)構(gòu)允許用戶先連接到最近添加的對(duì)象。

***,優(yōu)先隊(duì)列允許用戶依據(jù)存儲(chǔ)順序檢索對(duì)象。

這是 Python 中針對(duì)多線程編程使用queues 的一個(gè)實(shí)例。

_rep r_

在 Python中定義類(lèi)或?qū)ο髸r(shí),提供一種字符串表示對(duì)象的“官方”方法很實(shí)用。舉個(gè)例子:

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

這讓代碼調(diào)試變得更加簡(jiǎn)單。如下圖所示添加類(lèi)的定義:

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

Sh

Python 是一種很棒的腳本語(yǔ)言。有時(shí)使用標(biāo)準(zhǔn)操作系統(tǒng)以及子進(jìn)程庫(kù)是很令人頭疼的一個(gè)問(wèn)題。

Sh 庫(kù)提供了一種簡(jiǎn)介的替代方案。

它允許用戶在調(diào)用程序時(shí)如同調(diào)用函數(shù)一般,這對(duì)自動(dòng)化工作流和任務(wù)非常有用。所有的都來(lái)自 Python 內(nèi)部。

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

類(lèi)型提示

Python 是動(dòng)態(tài)語(yǔ)言,在定義變量,函數(shù),類(lèi)別……時(shí)無(wú)需指定數(shù)據(jù)類(lèi)型。

這個(gè)設(shè)定允許快速開(kāi)發(fā),但是由于簡(jiǎn)單的類(lèi)型錯(cuò)誤比運(yùn)行錯(cuò)誤更煩人。

從Python3.5開(kāi)始,定義函數(shù)時(shí)用戶可以選擇開(kāi)啟類(lèi)型提示。

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

用戶也可以定義類(lèi)型別名:

  1. 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.00.0], [0.01.0]] y = [[2.01.0], [0.0, -2.0]] z = addMatrix(x, y) 

盡管類(lèi)型注釋是非強(qiáng)制性的,但是這能讓代碼更具可讀性。

Python3.5+ 還允許用戶使用類(lèi)型提示工具在運(yùn)行前知曉類(lèi)型錯(cuò)誤,這在大型的復(fù)雜項(xiàng)目中是非常值得的。

uuid

生成通用唯一標(biāo)識(shí)符的快速簡(jiǎn)便方法是Python 標(biāo)準(zhǔn)庫(kù)中的 uuid 模塊。

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

它隨機(jī)生成 128位唯一數(shù)字。

事實(shí)上一共有 個(gè)可能生成的UUID。 這個(gè)數(shù)值超過(guò)了

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

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

僅用兩行代碼即可生成通用唯一標(biāo)志符,非常棒!

虛擬環(huán)境

這是我最喜歡的 Python 部分。

用戶可能需要同時(shí)處理多個(gè) Python 項(xiàng)目。不幸的是,有時(shí)候兩個(gè)項(xiàng)目依賴(lài)于相同依賴(lài)項(xiàng)的不同版本。那么用戶應(yīng)該下載哪個(gè)版本的依賴(lài)庫(kù)呢?

幸運(yùn)的是,Python 支持虛擬環(huán)境,讓用戶能夠同時(shí)利用兩種環(huán)境。命令行如下:

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

現(xiàn)在一臺(tái)機(jī)器上可以支持兩個(gè)版本的 Python 了。問(wèn)題解決!

Wikipedia

Wikipedia 具備非常棒的 API ,允許用戶以編程方式訪問(wèn)龐大的知識(shí)和信息。

Wikipedia 模塊使得訪問(wèn) Wikipedia API 非常地方便。

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

和真實(shí)的 Wikipedia 類(lèi)似,模塊支持多種語(yǔ)言,頁(yè)面消歧,隨機(jī)頁(yè)面檢索,甚至還有donate()方法

Xkcd

Humour 是 Python的關(guān)鍵特征——畢竟它的名字來(lái)源于英國(guó)喜劇片《Monty Python 的飛行馬戲團(tuán)》,Python 的很多官方文檔引用了該片的情節(jié)。

Python 的幽默感并不局限于官方文檔 。運(yùn)行下述命令行:

  1. import antigravity 

希望Python 不要改變它的幽默風(fēng)格

YAML

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

與 JSON不同的是,它可以存儲(chǔ)更復(fù)雜的對(duì)象并引用自己的元素。用戶可以編寫(xiě)注釋?zhuān)蛊溥m用于編寫(xiě)配置文件。

PyYAML模塊讓用戶在 Python 中使用 YAML 。安裝命令行如下:

  1. $ pip install pyyaml 

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

  1. import yaml 

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

Zip

***的一個(gè) Python 技巧,它真的很棒。還在用兩個(gè)列表來(lái)組成字典這樣的方法嗎?

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

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

用戶也可以使用 *zip()  來(lái)解壓對(duì)象

感謝閱讀

以上就是 A-Z 的 Python 技巧——相信你已經(jīng)找到有用于下一個(gè)項(xiàng)目的技巧了。

Python 是一個(gè)非常多樣化并且發(fā)展良好的編程語(yǔ)言,所以我對(duì) Python 許多非常棒的特征會(huì)有疏漏。

責(zé)任編輯:張燕妮 來(lái)源: 雷鋒網(wǎng)
相關(guān)推薦

2020-10-23 09:50:20

鏈表Java代碼

2023-01-05 17:55:39

分布式架構(gòu)

2020-06-19 09:01:48

Python開(kāi)發(fā)工具

2020-11-24 11:30:51

SpringJava代碼

2021-11-02 08:14:36

個(gè)人信息保護(hù)法信息安全個(gè)人信息

2021-11-04 09:08:39

項(xiàng)目JS 解構(gòu)知識(shí)

2023-12-08 08:01:29

分布式IM即時(shí)通訊系統(tǒng)架構(gòu)設(shè)計(jì)

2025-04-23 09:21:10

2022-02-28 19:32:27

I/O磁盤(pán)

2015-07-03 10:04:03

2021-05-25 13:45:29

數(shù)據(jù)設(shè)計(jì)師vivo

2018-07-27 11:15:14

AI

2015-06-18 11:21:01

戴爾云計(jì)算

2021-02-23 15:54:23

編程技能開(kāi)發(fā)

2018-08-03 10:49:00

2025-01-02 09:32:54

AI模型數(shù)據(jù)

2021-10-28 18:58:57

動(dòng)態(tài)規(guī)劃數(shù)據(jù)結(jié)構(gòu)算法

2015-11-12 10:25:48

編程語(yǔ)言

2015-11-11 10:01:42

編程語(yǔ)言選擇
點(diǎn)贊
收藏

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