成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

分享九個(gè)一般人不知道的Python好用技巧

開(kāi)發(fā) 后端
本篇分享是Python生態(tài)系統(tǒng)中關(guān)于一些有用的技巧。大多數(shù)技巧只是使用標(biāo)準(zhǔn)庫(kù)中的包,但其他一些技巧會(huì)涉及一些第三方包。

本篇分享是Python生態(tài)系統(tǒng)中關(guān)于一些有用的技巧。大多數(shù)技巧只是使用標(biāo)準(zhǔn)庫(kù)中的包,但其他一些技巧會(huì)涉及一些第三方包。

在開(kāi)始閱讀本文內(nèi)容之前,我們首先來(lái)回顧一下Python中的Iterables的概念。

[[440277]]

根據(jù)Python標(biāo)準(zhǔn)文檔,Iterable的概念如下:

  • 一種能夠一次返回一個(gè)成員的對(duì)象。

iterables的示例包括:

  • 所有序列類型(如list、str和tuple)
  • 一些非序列類型,如dict、文件對(duì)象以及類的實(shí)現(xiàn)中定義了__iter__()方法

Iterables是一個(gè)需要我們牢記的概念,因?yàn)榻酉聛?lái)我們展示的許多技巧都使用itertools包。

itertools模塊提供了一些函數(shù),用于接收Iterable對(duì)象,而不僅僅是打印逐個(gè)對(duì)象。

2.Trick 1

在工作學(xué)習(xí)中,我們經(jīng)常會(huì)需要使用一個(gè)簡(jiǎn)單的函數(shù)來(lái)實(shí)現(xiàn)從一個(gè)list來(lái)生成新的list,set或dict.此時(shí)我們就會(huì)用到iterables概念。

舉例來(lái)說(shuō):

生成List: 

  1. names = ['John''Bard''Jessica' 'Andres'
  2. lower_names = [name.lower() for name in names] 

生成Set: 

  1. names = ['John''Bard''Jessica' 'Andres'
  2. lower_names = { 
  3.  name.lower() for name in names} 

生成Dict: 

  1. names = ['John''Bard''Jessica' 'Andres'
  2. lower_names = { 
  3.  name:name.lower() for name in names} 

個(gè)人建議:

僅當(dāng)for語(yǔ)句、函數(shù)調(diào)用和方法調(diào)用的數(shù)量較少時(shí)使用。

3.Trick 2

有時(shí),我們需要獲得兩個(gè)列表對(duì)象之間的所有可能組合。

我們首先想到的實(shí)現(xiàn)可能如下: 

  1. l1 = [1, 2, 3] 
  2. l2 = [4, 5, 6] 
  3. combinations = [] 
  4. for e1 in l1: 
  5.   for e2 in l2: 
  6.     combinations.append((e1, e2)) 

或者簡(jiǎn)化一下,如下:

  1. combinations = [(e1, e2) for e1 in l1 for e2 in l1] 

上述實(shí)現(xiàn)已經(jīng)很簡(jiǎn)潔了,但標(biāo)準(zhǔn)庫(kù)itertools提供product函數(shù),從而提供了相同的結(jié)果。如下所示: 

  1. from itertools import product 
  2. l1 = [1, 2, 3] 
  3. l2 = [4, 5, 6] 
  4. combinatios = product(l1, l2) 

4.Trick3

假設(shè)有一個(gè)元素列表,我們需要在每對(duì)相鄰元素之間比較或應(yīng)用一些操作,這有時(shí)稱為2個(gè)元素的滑動(dòng)窗口。我們可以采用以下方式: 

  1. from itertools import tee 
  2. from typing import Iterable 
  3.  
  4. def window2(iterable: Iterable): 
  5.   it, offset = tee(iter(iterable)) 
  6.   next(offset) 
  7.   return zip(it, offset) 
  8. l = [1, 2, 3, 4, 5, 6] 
  9. dd = window2(l) 
  10. for a in dd: 
  11.     print(a) 

運(yùn)行結(jié)果如下: 

  1. (1, 2) 
  2. (2, 3) 
  3. (3, 4) 
  4. (4, 5) 
  5. (5, 6) 

5.Trick4

有時(shí),我們會(huì)需要一個(gè)類來(lái)存儲(chǔ)信息,但是如果我們覺(jué)得創(chuàng)建一個(gè)類并定義其__init__()函數(shù)太麻煩時(shí),我們不妨選擇使用dataclass。如下所示: 

  1. from dataclasses import dataclass 
  2. @dataclass 
  3. class Person: 
  4.   name: str 
  5.   age: int 
  6.   address: str 

上述代碼創(chuàng)建了一個(gè)具有默認(rèn)構(gòu)造函數(shù)的類,該類以與聲明相同的順序接收相應(yīng)字段的賦值。

  1. person = Person(name='John', age=12, address='nanjing street'

dataclass的另一個(gè)優(yōu)點(diǎn)是,默認(rèn)情況下,會(huì)生成特殊方法,如__str__、 repr 、__eq__等。關(guān)于dataclass的更多用法,可以 參考官網(wǎng) 。

值得一提的是我們?cè)陬愔新暶鞯某蓡T變量的類型注釋(str、int等)并不強(qiáng)制在構(gòu)造函數(shù)中傳遞的值屬于這種類型。也就是說(shuō)dataclasses構(gòu)造對(duì)象時(shí)并不執(zhí)行數(shù)據(jù)類型的檢查。

6.Trick5

我們有時(shí)希望將一個(gè)對(duì)象上的操作視為tuple上的操作,一種選擇是使用collections.namedtuple,但也存在更類似于dataclass的實(shí)現(xiàn)。如下: 

  1. from typing import NamedTuple  
  2. class Coordinate(NamedTuple):  
  3. x: int  
  4. y: int 

上述定義了一個(gè)標(biāo)準(zhǔn)的類可以被當(dāng)做tuple來(lái)使用,如下: 

  1. coordinate = Coordinate(10, 15)  
  2. coordinate.x == coordinate[0] // True  
  3. coordinate.y == coordinate[1] // True 

7.Trick6

假如我們有一個(gè)dataclass,需要驗(yàn)證輸入數(shù)據(jù)是否符合類型注釋。在這種情況下,安裝第三方軟件包pydantic并將

from dataclasses import dataclass 替換為 from pydantic.dataclasses import dataclass 即可,如下: 

  1. from pydantic.dataclasses import dataclass 
  2. @dataclass 
  3. class Person: 
  4.   name: str 
  5.   age: int 
  6.   address: str 

這將生成一個(gè)類,該類具有根據(jù)成員變量聲明的類型進(jìn)行輸入數(shù)據(jù)的解析和類型驗(yàn)證。 Pydantic 在運(yùn)行時(shí)強(qiáng)制執(zhí)行類型提示,并在數(shù)據(jù)無(wú)效時(shí)提供友好的錯(cuò)誤提醒。

8.Trick7

在某些情況下,我們需要生成一些容器中元素頻率的基本統(tǒng)計(jì)信息。在這種情況下,您可以使用標(biāo)準(zhǔn)結(jié)構(gòu)Counter來(lái)接收iterable并根據(jù)元素的頻率生成相應(yīng)的統(tǒng)計(jì)信息。 

  1. from collections import Counter 
  2. l = [1, 1, 2, 3, 4, 4] 
  3. frequencys = Counter(l) 
  4. print(frequencys[1])    // Ouput: 2 
  5. print(frequencys[2])    // Ouput: 1 
  6. print(frequencys[2323]) // Ouput: 0 

Counter也提供了一些其他方法,比如如most_common,用于檢索最常見(jiàn)的元素。

9.Trick8

如果我們相對(duì)兩個(gè)list中的元素對(duì)做相應(yīng)的函數(shù)處理,我們最容易想到的方法如下: 

  1. l1 = [1, 2, 3]  
  2. l2 = [4, 5, 6]  
  3. for (e1, e2) in zip(l1, l2):  
  4. f(e1, e2) 

但是使用函數(shù)map可以讓代碼更加簡(jiǎn)潔一些。 

  1. l1 = [1, 2, 3]  
  2. l2 = [4, 5, 6]  
  3. map(f, l1, l2)  

10.Trick9

有時(shí)候我們需要從一個(gè)list中隨機(jī)選擇一個(gè)元素,此時(shí)我們使用random.choice.如下所示: 

  1. from random import choice  
  2. l = [1, 2, 3]  
  3. random = choice(l) 

如果我們需要隨機(jī)選擇多個(gè)元素呢?當(dāng)然是使用random.choices. 

  1. from random import choices 
  2. l = [1, 2, 3, 4, 5] 
  3. random_elements = choices(l, k=3) 

上述代碼中的參數(shù)k為我們隨機(jī)選擇元素的個(gè)數(shù)。

11.總結(jié)

本文重點(diǎn)介紹了在python中9個(gè)和迭代相關(guān)的使用技巧,可以方便提升大家的工作效率。

您學(xué)廢了嗎?

 

責(zé)任編輯:未麗燕 來(lái)源: 今日頭條
相關(guān)推薦

2019-07-22 06:33:55

R語(yǔ)言編程函數(shù)

2021-05-07 22:11:56

寬帶手機(jī)運(yùn)營(yíng)商

2018-01-25 09:15:16

機(jī)房機(jī)柜走線

2021-01-12 12:33:20

Pandas技巧代碼

2023-12-21 14:40:09

Python編程語(yǔ)言

2025-02-04 17:33:00

2023-08-14 15:56:52

CSS 偽元素開(kāi)發(fā)

2023-05-22 15:37:31

CSS元素JavaScript

2022-06-23 13:13:36

GitHub開(kāi)發(fā)技巧

2020-01-29 19:40:36

Python美好,一直在身邊Line

2021-01-05 11:22:58

Python字符串代碼

2020-07-11 09:45:33

Python編程語(yǔ)言開(kāi)發(fā)

2009-04-14 21:38:05

LinuxUbuntu技巧

2023-07-07 14:47:46

JavaScript技巧

2021-08-24 00:13:23

Windows 10Windows微軟

2020-07-14 08:43:54

VueHTML函數(shù)

2020-08-11 11:20:49

Linux命令使用技巧

2021-11-02 19:14:58

Spring數(shù)據(jù)

2019-12-17 15:10:21

Python字符串代碼

2025-04-16 07:06:43

點(diǎn)贊
收藏

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

主站蜘蛛池模板: 欧美激情区 | 国产精品揄拍一区二区 | 永久看片 | 亚洲精品久久久久久一区二区 | 国产午夜精品一区二区三区 | 国产精品大片在线观看 | 先锋资源网站 | 午夜精品一区二区三区在线观看 | 亚洲黄色在线 | www.亚洲视频 | 国户精品久久久久久久久久久不卡 | 日韩精品色网 | 91资源在线| 久久精品免费观看 | 美女黄网站视频免费 | 欧美成人激情 | 亚洲精品乱码 | 激情 一区 | 九九色九九 | 日韩精品在线一区 | 日本a∨精品中文字幕在线 亚洲91视频 | 亚洲一区二区三区观看 | 久久精品亚洲 | 国产一区二区黑人欧美xxxx | www日本高清 | 亚洲午夜一区二区 | 久久国产亚洲精品 | 久久婷婷av | 国产成人小视频 | 亚洲精品国产a久久久久久 午夜影院网站 | 亚洲一区二区免费 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 亚洲第一女人av | 久久久久国产精品 | 久久精品aaa | 国产99视频精品免视看9 | 午夜精品久久久久久久久久久久久 | 91短视频网址 | 久久成人午夜 | 人人看人人射 | 91在线视频观看 |