最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

分享9個(gè)好用的Python技巧

 更新時(shí)間:2021年12月13日 10:56:11   作者:趙卓不凡  
大家好,本篇文章主要講的是分享9個(gè)好用的Python技巧,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽

1.引言

本文是Python生態(tài)系統(tǒng)中一些有用技巧的分享。大多數(shù)技巧只是使用標(biāo)準(zhǔn)庫(kù)中的包,但其他一些技巧會(huì)涉及一些第三方包。
在開始閱讀本文內(nèi)容之前,我們首先來(lái)回顧一下Python中的Iterables的概念。

根據(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:

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

生成Set:

names = ['John', 'Bard', 'Jessica' 'Andres']
lower_names = {name.lower() for name in names}

生成Dict:

names = ['John', 'Bard', 'Jessica' 'Andres']
lower_names = {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)可能如下:

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

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

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é)果。如下所示:

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

4.Trick3

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

from itertools import tee
from typing import Iterable

def window2(iterable: Iterable):
  it, offset = tee(iter(iterable))
  next(offset)
  return zip(it, offset)
l = [1, 2, 3, 4, 5, 6]
dd = window2(l)
for a in dd:
    print(a) 

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

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

5.Trick4

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

from dataclasses import dataclass
@dataclass
class Person:
  name: str
  age: int
  address: str

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

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)。如下:

from typing import NamedTuple
class Coordinate(NamedTuple):
  x: int
  y: int

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

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

7.Trick6

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

from pydantic.dataclasses import dataclass
@dataclass
class Person:
  name: str
  age: int
  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ì)信息。

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

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

9.Trick8

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

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

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

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

10.Trick9

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

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

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

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

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

11.總結(jié)

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

到此這篇關(guān)于分享9個(gè)好用的Python技巧的文章就介紹到這了,更多相關(guān)Python技巧內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python+drawpad實(shí)現(xiàn)CPU監(jiān)控小程序

    Python+drawpad實(shí)現(xiàn)CPU監(jiān)控小程序

    這篇文章主要為大家詳細(xì)介紹了如何利用Python+drawpad實(shí)現(xiàn)一個(gè)簡(jiǎn)單的CPU監(jiān)控小程序,文中示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下
    2022-08-08
  • 使用python制作一個(gè)為hex文件增加版本號(hào)的腳本實(shí)例

    使用python制作一個(gè)為hex文件增加版本號(hào)的腳本實(shí)例

    今天小編就為大家分享一篇使用python制作一個(gè)為hex文件增加版本號(hào)的腳本實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2019-06-06
  • numpy中的converters和usecols用法詳解

    numpy中的converters和usecols用法詳解

    本文主要介紹了numpy中的converters和usecols用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 淺談python數(shù)據(jù)類型及類型轉(zhuǎn)換

    淺談python數(shù)據(jù)類型及類型轉(zhuǎn)換

    這篇文章主要介紹了淺談python數(shù)據(jù)類型及類型轉(zhuǎn)換,介紹了python中的數(shù)據(jù)類型,以及數(shù)據(jù)的不可變性,還有字符串,列表等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Python反爬蟲偽裝瀏覽器進(jìn)行爬蟲

    Python反爬蟲偽裝瀏覽器進(jìn)行爬蟲

    這篇文章主要介紹了Python反爬蟲偽裝瀏覽器進(jìn)行爬蟲,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Python中__init__方法使用的深度解析

    Python中__init__方法使用的深度解析

    在Python的面向?qū)ο缶幊蹋∣OP)體系中,__init__方法如同建造房屋時(shí)的"奠基儀式"——它定義了對(duì)象誕生時(shí)的初始狀態(tài),下面我們就來(lái)深入了解下__init__方法吧
    2025-04-04
  • Python中Sorted()函數(shù)的key參數(shù)使用方法詳解

    Python中Sorted()函數(shù)的key參數(shù)使用方法詳解

    這篇文章主要介紹了關(guān)于Python中Sorted()函數(shù)的key參數(shù)使用方法 ,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-06-06
  • 簡(jiǎn)單的通用表達(dá)式求10乘階示例

    簡(jiǎn)單的通用表達(dá)式求10乘階示例

    這篇文章主要介紹了簡(jiǎn)單的通用表達(dá)式求10乘階示例,需要的朋友可以參考下
    2014-03-03
  • wxpython中自定義事件的實(shí)現(xiàn)與使用方法分析

    wxpython中自定義事件的實(shí)現(xiàn)與使用方法分析

    這篇文章主要介紹了wxpython中自定義事件的實(shí)現(xiàn)與使用方法,結(jié)合實(shí)例形式詳細(xì)分析了wxpython中自定義事件的創(chuàng)建步驟與使用方法,需要的朋友可以參考下
    2016-07-07
  • Python關(guān)于迭代器的使用

    Python關(guān)于迭代器的使用

    這篇文章主要介紹了Python關(guān)于迭代器的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06

最新評(píng)論

德保县| 吉安县| 松阳县| 惠东县| 彰武县| 工布江达县| 岳阳县| 肥城市| 满城县| 二手房| 福安市| 都安| 丹阳市| 宜丰县| 泽库县| 茶陵县| 巴彦淖尔市| 中宁县| 淮北市| 通榆县| 肇源县| 兴仁县| 盈江县| 浦江县| 平阴县| 弋阳县| 广宁县| 淄博市| 玛曲县| 广水市| 万全县| 肇庆市| 东丰县| 正安县| 长汀县| 双江| 阿巴嘎旗| 和政县| 临潭县| 兴安盟| 林西县|