AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁(yè) > 科技  > 軟件

十個(gè)提高Python水平的高級(jí)知識(shí)點(diǎn)

來(lái)源: 責(zé)編: 時(shí)間:2023-12-22 17:13:14 239觀看
導(dǎo)讀本文,我們將分享一些有助于我們掌握 Python 的高級(jí)概念。如迭代器、生成器、裝飾器等!一、異常處理異常處理是一個(gè)很重要的概念,它可以幫助我們更好地解決程序中的各種問(wèn)題。異常是在程序執(zhí)行過(guò)程中發(fā)生并中斷的情況。它

本文,我們將分享一些有助于我們掌握 Python 的高級(jí)概念。如迭代器、生成器、裝飾器等!XP228資訊網(wǎng)——每日最新資訊28at.com

XP228資訊網(wǎng)——每日最新資訊28at.com

一、異常處理

異常處理是一個(gè)很重要的概念,它可以幫助我們更好地解決程序中的各種問(wèn)題。XP228資訊網(wǎng)——每日最新資訊28at.com

異常是在程序執(zhí)行過(guò)程中發(fā)生并中斷的情況。它可能由于多種原因而發(fā)生。比如:除法運(yùn)算中分母為0的情況,會(huì)拋出:ZeroDivisionError;導(dǎo)入不存在的包時(shí),會(huì)拋出:ImportError;列表越界時(shí),會(huì)拋出:IndexError。python 中大約有30個(gè)內(nèi)置異常。XP228資訊網(wǎng)——每日最新資訊28at.com

我們使用 try 和 except 來(lái)處理 Python 中的異常。語(yǔ)法如下:XP228資訊網(wǎng)——每日最新資訊28at.com

try:    pass # 可能發(fā)生異常的代碼except ValueError:    pass # 發(fā)生異常時(shí)執(zhí)行的代碼except ZeroDivisionError:    pass # 發(fā)生異常時(shí)執(zhí)行的代碼else:    pass # 其他情況時(shí)執(zhí)行的代碼finally:    pass # 最終執(zhí)行的執(zhí)行的代碼

二、collections模塊

collections 模塊被稱為用于存儲(chǔ)數(shù)據(jù)的容器。例如列表、元組、集合、字典。Python 中有許多庫(kù)是為了提供額外的數(shù)據(jù)結(jié)構(gòu)而開(kāi)發(fā)的, collections就是其中之一,旨在改進(jìn)內(nèi)置容器的功能。該模塊中最常用的五種數(shù)據(jù)結(jié)構(gòu):XP228資訊網(wǎng)——每日最新資訊28at.com

1. Counter

對(duì)可迭代對(duì)象的計(jì)數(shù)。XP228資訊網(wǎng)——每日最新資訊28at.com

from collections import Counterdata = [1,1,1,2,3,4,3,3,5,6,7,7,1]count = Counter(data)print(count) # Counter({1: 4, 2: 1, 3: 4, 4: 1, 5: 1, 6: 1, 7: 2})## ?? Counter有幾個(gè)驚艷的方法:# 返回出現(xiàn)次數(shù)最多的前3個(gè)元素print(count.most_common(3)) # [('1', 4), ('3', 4), ('2', 1)]# 返回生成Counter對(duì)象的數(shù)據(jù),迭代器格式。for i in count.elements():    print(i) # 1 1 1 2 3 4 3 3 5 6 7 7 1

2. namedtuple

給元組元素命名,并且可以通過(guò)名字訪問(wèn)元素。XP228資訊網(wǎng)——每日最新資訊28at.com

from collections import namedtupleUser = namedtuple('User', ['name', 'sex', 'age'])user = User(name='Runoob', sex='male', age=12)print(user) # User(name='Runoob', sex='male', age=12)user = User._make(['RunoX', 'Male', 13])print(user) # User(name='RunoX', sex='Male', age=13)print(user.name, user.sex, user.age) # RunoX Male 13user = user._replace(age=22)print(user) # User(name='RunoX', sex='Male', age=22)print(user._asdict()) # {'name': 'RunoX', 'sex': 'Male', 'age': 22}

3. OrderedDict

OrderedDict 是一種可以記住它們插入順序的字典。當(dāng)然,在最新版本的 Python 中,內(nèi)置的 dict 也可以記住它。XP228資訊網(wǎng)——每日最新資訊28at.com

from collections import OrderedDictdictt = OrderedDict()dictt['a'] = 5dictt['d'] = 2dictt['c'] = 1dictt['b'] = 3print(dictt) # OrderedDict([('a', 5), ('d', 2), ('c', 1), ('b', 3)])

4. defaultdict

defaultdict 將返回字典中不存在的鍵的默認(rèn)值,而不是顯示鍵錯(cuò)誤。當(dāng)然新版的dict.get()方法也可以返回默認(rèn)值。XP228資訊網(wǎng)——每日最新資訊28at.com

# 創(chuàng)建一個(gè)默認(rèn)值為0的字典from collections import defaultdictdictt = defaultdict(int)dictt['a'] = 2print(dictt['a']) # 2print(dictt['b']) # 0# 新版本的 `dict.get()` 方法dict = {'a': 1, 'b': 2}print(dict.get('a', 0)) # 1print(dict.get('c', 0)) # 0print(dict.get('c')) # None

5. deque

deque 是一個(gè)雙端隊(duì)列,可以從兩側(cè)添加和刪除元素。XP228資訊網(wǎng)——每日最新資訊28at.com

from collections import dequequeue = deque(['a', 'b', 'c'])queue.append('d')print(queue) # deque(['a', 'b', 'c', 'd'])queue.appendleft('e')print(queue) # deque(['e', 'a', 'b', 'c', 'd'])queue.pop()print(queue) # deque(['e', 'a', 'b', 'c'])queue.popleft()print(queue) # deque(['a', 'b', 'c'])

三、itertools 模塊

Python itertools 模塊提供了各種適用于組合計(jì)算的函數(shù)。XP228資訊網(wǎng)——每日最新資訊28at.com

  1. product(iterable,iterable):兩個(gè)iterables的笛卡爾積
  2. permutation(iterable):所有可能的排序,沒(méi)有重復(fù)元素
  3. combinations(iterable,n):指定長(zhǎng)度的所有可能組合,不重復(fù)。這里 n 是組合元組的大小。
  4. combinations_with_replacement(iterable,n):指定長(zhǎng)度的所有可能的組合,重復(fù)。
  5. accumlate(iterable) :返回累積iterable元素的總和。
  6. groupby(iterable,key=FUNC) :返回一個(gè)迭代器,其中包含來(lái)自可迭代對(duì)象的連續(xù)鍵和組。
from itertools import product, permutations, combinations, combinations_with_replacement, accumulate, groupbya = [1,2,3]print(list(product(a,a))) # [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]print(list(permutations(a))) # [(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]print(list(combinations(a,2))) # [(1, 2), (1, 3), (2, 3)]print(list(combinations_with_replacement(a,2))) # [(1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)]print(list(accumulate(a))) # [1, 3, 6]print(list(groupby(a))) # [(1, <itertools._grouper object at 0x7f8b8b8b9d10>), (2, <itertools._grouper object at 0x7f8b8b8b9d20>), (3, <itertools._grouper object at 0x7f8b8b8b9d30>)]

四、lambda 函數(shù)

lambda 函數(shù)是一種匿名函數(shù),它的語(yǔ)法只包含一個(gè)語(yǔ)句,即:lambda [arg1 [,arg2,.....argn]]:expression。XP228資訊網(wǎng)——每日最新資訊28at.com

even_or_odd = lambda a: a%2==0numbers = [1,2,3,4,5]even = list(map(even_or_odd,numbers))print(even) # [False, True, False, True, False]

五、裝飾器

裝飾器是 Python 的一個(gè)特性,它可以在不顯式修改現(xiàn)有代碼的情況下向現(xiàn)有代碼添加一些新功能。XP228資訊網(wǎng)——每日最新資訊28at.com

有兩種類型的裝飾器——函數(shù)裝飾器和類裝飾器。裝飾器函數(shù)在函數(shù)名前有一個(gè)@。XP228資訊網(wǎng)——每日最新資訊28at.com

要理解裝飾器的概念,我們首先需要了解一件事——python 中的函數(shù)是類對(duì)象。與其他對(duì)象不同,它們可以在函數(shù)內(nèi)部定義,在其他函數(shù)中作為參數(shù)傳遞,甚至作為函數(shù)返回。XP228資訊網(wǎng)——每日最新資訊28at.com

import functoolsdef decorator(func):    @functools.wraps(func)    def wrapper(*args, **kwargs):        a,b = args        print(a*b)        result = func(*args,**kwargs)        print(a/b)        return result    return wrapper@decoratordef add(x,y):    return x+yresult = add(5,6)print(result) ##

讓我們理解上面裝飾器的例子:XP228資訊網(wǎng)——每日最新資訊28at.com

首先,我們有一個(gè)函數(shù)名 add,它的工作是獲取兩個(gè)變量并返回它們的總和。現(xiàn)在經(jīng)過(guò)一段時(shí)間的工作后,我們意識(shí)到需要為同一個(gè)函數(shù)添加乘法和除法功能。現(xiàn)在我們有兩個(gè)選擇,第一個(gè)是在同一個(gè) add 函數(shù)中添加乘法和除法代碼。或者我們可以使用裝飾器來(lái)添加功能而無(wú)需顯式更改函數(shù)。XP228資訊網(wǎng)——每日最新資訊28at.com

為了使用裝飾器,我們首先在第 2 行定義了一個(gè)裝飾器函數(shù)。此函數(shù)將 func 作為輸入。在第二行中,我們有另一個(gè)函數(shù),因?yàn)槲覀冎牢覀兛梢栽诤瘮?shù)內(nèi)部定義函數(shù)。它是一個(gè)具有 *args、**kwargs 函數(shù)參數(shù)的包裝函數(shù)。有了這些,兩者都定義為參數(shù),現(xiàn)在我們可以在函數(shù)內(nèi)部傳遞任意數(shù)量的參數(shù)。在包裝函數(shù)的主體中,我們有乘法邏輯,然后僅使用加法邏輯調(diào)用實(shí)際的加法函數(shù),最后我們有除法邏輯。當(dāng)我們使用一些參數(shù) add(5,6) 調(diào)用 add 函數(shù)時(shí),輸出將是:XP228資訊網(wǎng)——每日最新資訊28at.com

300.833333333333333411

因?yàn)樗紫葓?zhí)行乘法邏輯并打印值,然后加法邏輯并保存值,然后除法邏輯并打印值,最后返回相加的值并打印值。XP228資訊網(wǎng)——每日最新資訊28at.com

六、迭代器

生成器是一種返回可迭代對(duì)象的函數(shù)。它至少包含一個(gè) yield 語(yǔ)句。yield 是 Python 中的一個(gè)關(guān)鍵字,用于從函數(shù)返回值而不破壞其當(dāng)前狀態(tài)或?qū)植孔兞康囊谩в?yield 關(guān)鍵字的函數(shù)稱為生成器。相對(duì)于 return 你可以把 yield 理解為不中斷函數(shù)的暫停,并且返回一個(gè)值。XP228資訊網(wǎng)——每日最新資訊28at.com

生成器僅在需要時(shí)生成一次項(xiàng)目。它們的內(nèi)存效率很高,占用的內(nèi)存空間更少。XP228資訊網(wǎng)——每日最新資訊28at.com

def fibonacci(n):    a,b = 0,1    for i in range(n):        a,b = b,a+b        yield afor i in fibonacci(5):    print(i) ## 1 1 2 3 5

七、進(jìn)程和線程

線程和多處理都用于同時(shí)運(yùn)行多個(gè)腳本。進(jìn)程是程序的一個(gè)實(shí)例,線程是進(jìn)程中的一個(gè)實(shí)體。XP228資訊網(wǎng)——每日最新資訊28at.com

線程化是多個(gè)線程同時(shí)運(yùn)行以執(zhí)行不同任務(wù)的技術(shù),而多處理是多個(gè)進(jìn)程同時(shí)運(yùn)行在不同CPU上的技術(shù)。下圖對(duì)進(jìn)程和線程的區(qū)別進(jìn)行了說(shuō)明,更多的信息請(qǐng)參考:這兒XP228資訊網(wǎng)——每日最新資訊28at.com

XP228資訊網(wǎng)——每日最新資訊28at.com

八、雙下劃線方法

Dunder 是 Double 和 Under 的縮寫,稱為雙下劃線方法,是python中的一種特殊方法。XP228資訊網(wǎng)——每日最新資訊28at.com

num =5print(num*6) ## 30print(num.__mul__(6)) ## 30

這些方法主要用于重載預(yù)定義的運(yùn)算符。例如,+、-、*、/ 是必須在數(shù)字對(duì)象周圍使用的數(shù)字運(yùn)算符,但 + 也用作兩個(gè)字符串之間的連接運(yùn)算符。所以我們可以說(shuō) + 運(yùn)算符被重載來(lái)執(zhí)行多個(gè)任務(wù)。XP228資訊網(wǎng)——每日最新資訊28at.com

a =5b =6print(a+b) ## 11print(a.__add__(b)) ## 11c = 'hello'd = 'world'print(c+d) ## helloworldprint(c.__add__(d)) ## helloworld

九、日志

日志記錄是在代碼執(zhí)行時(shí)捕獲代碼流的過(guò)程。日志記錄有助于輕松調(diào)試代碼。它通常在文件中完成,以便我們以后可以檢索它。在 python 中,我們有一個(gè)庫(kù)日志記錄,可以幫助我們將日志寫入文件。有五個(gè)級(jí)別的日志記錄:XP228資訊網(wǎng)——每日最新資訊28at.com

  1. Debug 調(diào)試:用于診斷問(wèn)題的詳細(xì)信息。
  2. Info 信息:成功確認(rèn)。
  3. Warning 警告:發(fā)生意外情況時(shí)。
  4. Error 錯(cuò)誤:由于比警告更嚴(yán)重的問(wèn)題。
  5. Critical 嚴(yán)重:嚴(yán)重錯(cuò)誤后程序無(wú)法自行運(yùn)行。

這兒作者推薦大家一個(gè)簡(jiǎn)單的日志記錄工具:loguru。XP228資訊網(wǎng)——每日最新資訊28at.com

十、上下文管理器

上下文管理器是 Python 中的一個(gè)很好的工具,可以幫助進(jìn)行資源管理。它們?cè)试S您在需要時(shí)分配和釋放資源。上下文管理器最常用和最受認(rèn)可的例子是 with 語(yǔ)句。with 主要用于打開(kāi)和關(guān)閉文件。XP228資訊網(wǎng)——每日最新資訊28at.com

with open('./test.txt', 'w') as f:    f.write('Hello World!')

小節(jié)

上面分享的10個(gè)提供python水平的高級(jí)知識(shí)點(diǎn),希望在你工作或面試中有所幫助。XP228資訊網(wǎng)——每日最新資訊28at.com

在編程的路上,挑戰(zhàn)與精進(jìn)同在,嘗試學(xué)習(xí)使用裝飾器 、yield、itertool 之類的高級(jí)功能,可以讓你的編程生活變得更加有趣!XP228資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-52167-0.html十個(gè)提高Python水平的高級(jí)知識(shí)點(diǎn)

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 17個(gè)提升Python的編碼技巧,從此鍵盤飛起

下一篇: Hypothesis, 一個(gè)很少人會(huì)用的Python測(cè)試庫(kù)

標(biāo)簽:
  • 熱門焦點(diǎn)
  • K60至尊版狂暴引擎2.0加持:超177萬(wàn)跑分?jǐn)孬@性能第一

    Redmi的后性能時(shí)代戰(zhàn)略發(fā)布會(huì)今天下午如期舉辦,在本次發(fā)布會(huì)上,Redmi公布了多項(xiàng)關(guān)于和聯(lián)發(fā)科的深度合作,以及新機(jī)K60 Ultra在軟件和硬件方面的特性,例如:“K60 至尊版,雙芯旗艦
  • Raft算法:保障分布式系統(tǒng)共識(shí)的穩(wěn)健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可復(fù)制、可冗余、可容錯(cuò)”)的首字母縮寫。Raft算法是一種用于在分布式系統(tǒng)
  • 2023 年的 Node.js 生態(tài)系統(tǒng)

    隨著技術(shù)的不斷演進(jìn)和創(chuàng)新,Node.js 在 2023 年達(dá)到了一個(gè)新的高度。Node.js 擁有一個(gè)龐大的生態(tài)系統(tǒng),可以幫助開(kāi)發(fā)人員更快地實(shí)現(xiàn)復(fù)雜的應(yīng)用。本文就來(lái)看看 Node.js 最新的生
  • 只需五步,使用start.spring.io快速入門Spring編程

    步驟1打開(kāi)https://start.spring.io/,按照屏幕截圖中的內(nèi)容創(chuàng)建項(xiàng)目,添加 Spring Web 依賴項(xiàng),并單擊“生成”按鈕下載 .zip 文件,為下一步做準(zhǔn)備。請(qǐng)?jiān)谶M(jìn)入步驟2之前進(jìn)行解壓。圖
  • 破圈是B站頭上的緊箍咒

    來(lái)源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之每年的暑期檔都少不了瞄準(zhǔn)追劇女孩們的古偶劇集,2021年有優(yōu)酷的《山河令》,2022年有愛(ài)奇藝的《蒼蘭訣》,今年卻輪到小破站抓住了追
  • 得物寵物生意「狂飆」,發(fā)力“它經(jīng)濟(jì)”

    作者|花花小萌主近日,得物宣布正式上線寵物鑒別,通過(guò)得物App內(nèi)的&ldquo;在線鑒別&rdquo;,可找到鑒別寵物的選項(xiàng)。通過(guò)上傳自家寵物的部位細(xì)節(jié),就能收獲擁有專業(yè)資質(zhì)認(rèn)證的得物鑒
  • iQOO Neo8系列新品發(fā)布會(huì)

    旗艦雙芯 更強(qiáng)更Pro
  • 英特爾Xe-HP項(xiàng)目終止,將專注Xe-HPC/HPG系列顯卡

    據(jù)10 月 31 日消息報(bào)道,英特爾高級(jí)副總裁兼加速計(jì)算系統(tǒng)和圖形事業(yè)部總經(jīng)理 表示,Xe-HP“ Arctic Sound” 系列服務(wù)器 GPU 已經(jīng)應(yīng)用于 oneAPI devcloud 云服
  • 聯(lián)想的ThinkBook Plus下一版曝光,鍵盤旁邊塞個(gè)平板

    ThinkBook Plus 是聯(lián)想的一個(gè)特殊筆記本類別,它在封面放入了一塊墨水屏,也給人留下了較為深刻的印象。據(jù)有人爆料,聯(lián)想的下一款 ThinkBook Plus 可能更特殊,它
Top