日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

十個提高Python水平的高級知識點

來源: 責編: 時間:2023-12-22 17:13:14 226觀看
導讀本文,我們將分享一些有助于我們掌握 Python 的高級概念。如迭代器、生成器、裝飾器等!一、異常處理異常處理是一個很重要的概念,它可以幫助我們更好地解決程序中的各種問題。異常是在程序執行過程中發生并中斷的情況。它

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

7KO28資訊網——每日最新資訊28at.com

一、異常處理

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

異常是在程序執行過程中發生并中斷的情況。它可能由于多種原因而發生。比如:除法運算中分母為0的情況,會拋出:ZeroDivisionError;導入不存在的包時,會拋出:ImportError;列表越界時,會拋出:IndexError。python 中大約有30個內置異常。7KO28資訊網——每日最新資訊28at.com

我們使用 try 和 except 來處理 Python 中的異常。語法如下:7KO28資訊網——每日最新資訊28at.com

try:    pass # 可能發生異常的代碼except ValueError:    pass # 發生異常時執行的代碼except ZeroDivisionError:    pass # 發生異常時執行的代碼else:    pass # 其他情況時執行的代碼finally:    pass # 最終執行的執行的代碼

二、collections模塊

collections 模塊被稱為用于存儲數據的容器。例如列表、元組、集合、字典。Python 中有許多庫是為了提供額外的數據結構而開發的, collections就是其中之一,旨在改進內置容器的功能。該模塊中最常用的五種數據結構:7KO28資訊網——每日最新資訊28at.com

1. Counter

對可迭代對象的計數。7KO28資訊網——每日最新資訊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有幾個驚艷的方法:# 返回出現次數最多的前3個元素print(count.most_common(3)) # [('1', 4), ('3', 4), ('2', 1)]# 返回生成Counter對象的數據,迭代器格式。for i in count.elements():    print(i) # 1 1 1 2 3 4 3 3 5 6 7 7 1

2. namedtuple

給元組元素命名,并且可以通過名字訪問元素。7KO28資訊網——每日最新資訊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 是一種可以記住它們插入順序的字典。當然,在最新版本的 Python 中,內置的 dict 也可以記住它。7KO28資訊網——每日最新資訊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 將返回字典中不存在的鍵的默認值,而不是顯示鍵錯誤。當然新版的dict.get()方法也可以返回默認值。7KO28資訊網——每日最新資訊28at.com

# 創建一個默認值為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 是一個雙端隊列,可以從兩側添加和刪除元素。7KO28資訊網——每日最新資訊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 模塊提供了各種適用于組合計算的函數。7KO28資訊網——每日最新資訊28at.com

  1. product(iterable,iterable):兩個iterables的笛卡爾積
  2. permutation(iterable):所有可能的排序,沒有重復元素
  3. combinations(iterable,n):指定長度的所有可能組合,不重復。這里 n 是組合元組的大小。
  4. combinations_with_replacement(iterable,n):指定長度的所有可能的組合,重復。
  5. accumlate(iterable) :返回累積iterable元素的總和。
  6. groupby(iterable,key=FUNC) :返回一個迭代器,其中包含來自可迭代對象的連續鍵和組。
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 函數

lambda 函數是一種匿名函數,它的語法只包含一個語句,即:lambda [arg1 [,arg2,.....argn]]:expression。7KO28資訊網——每日最新資訊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 的一個特性,它可以在不顯式修改現有代碼的情況下向現有代碼添加一些新功能。7KO28資訊網——每日最新資訊28at.com

有兩種類型的裝飾器——函數裝飾器和類裝飾器。裝飾器函數在函數名前有一個@。7KO28資訊網——每日最新資訊28at.com

要理解裝飾器的概念,我們首先需要了解一件事——python 中的函數是類對象。與其他對象不同,它們可以在函數內部定義,在其他函數中作為參數傳遞,甚至作為函數返回。7KO28資訊網——每日最新資訊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) ##

讓我們理解上面裝飾器的例子:7KO28資訊網——每日最新資訊28at.com

首先,我們有一個函數名 add,它的工作是獲取兩個變量并返回它們的總和。現在經過一段時間的工作后,我們意識到需要為同一個函數添加乘法和除法功能。現在我們有兩個選擇,第一個是在同一個 add 函數中添加乘法和除法代碼。或者我們可以使用裝飾器來添加功能而無需顯式更改函數。7KO28資訊網——每日最新資訊28at.com

為了使用裝飾器,我們首先在第 2 行定義了一個裝飾器函數。此函數將 func 作為輸入。在第二行中,我們有另一個函數,因為我們知道我們可以在函數內部定義函數。它是一個具有 *args、**kwargs 函數參數的包裝函數。有了這些,兩者都定義為參數,現在我們可以在函數內部傳遞任意數量的參數。在包裝函數的主體中,我們有乘法邏輯,然后僅使用加法邏輯調用實際的加法函數,最后我們有除法邏輯。當我們使用一些參數 add(5,6) 調用 add 函數時,輸出將是:7KO28資訊網——每日最新資訊28at.com

300.833333333333333411

因為它首先執行乘法邏輯并打印值,然后加法邏輯并保存值,然后除法邏輯并打印值,最后返回相加的值并打印值。7KO28資訊網——每日最新資訊28at.com

六、迭代器

生成器是一種返回可迭代對象的函數。它至少包含一個 yield 語句。yield 是 Python 中的一個關鍵字,用于從函數返回值而不破壞其當前狀態或對局部變量的引用。帶有 yield 關鍵字的函數稱為生成器。相對于 return 你可以把 yield 理解為不中斷函數的暫停,并且返回一個值。7KO28資訊網——每日最新資訊28at.com

生成器僅在需要時生成一次項目。它們的內存效率很高,占用的內存空間更少。7KO28資訊網——每日最新資訊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

七、進程和線程

線程和多處理都用于同時運行多個腳本。進程是程序的一個實例,線程是進程中的一個實體。7KO28資訊網——每日最新資訊28at.com

線程化是多個線程同時運行以執行不同任務的技術,而多處理是多個進程同時運行在不同CPU上的技術。下圖對進程和線程的區別進行了說明,更多的信息請參考:這兒7KO28資訊網——每日最新資訊28at.com

7KO28資訊網——每日最新資訊28at.com

八、雙下劃線方法

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

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

這些方法主要用于重載預定義的運算符。例如,+、-、*、/ 是必須在數字對象周圍使用的數字運算符,但 + 也用作兩個字符串之間的連接運算符。所以我們可以說 + 運算符被重載來執行多個任務。7KO28資訊網——每日最新資訊28at.com

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

九、日志

日志記錄是在代碼執行時捕獲代碼流的過程。日志記錄有助于輕松調試代碼。它通常在文件中完成,以便我們以后可以檢索它。在 python 中,我們有一個庫日志記錄,可以幫助我們將日志寫入文件。有五個級別的日志記錄:7KO28資訊網——每日最新資訊28at.com

  1. Debug 調試:用于診斷問題的詳細信息。
  2. Info 信息:成功確認。
  3. Warning 警告:發生意外情況時。
  4. Error 錯誤:由于比警告更嚴重的問題。
  5. Critical 嚴重:嚴重錯誤后程序無法自行運行。

這兒作者推薦大家一個簡單的日志記錄工具:loguru。7KO28資訊網——每日最新資訊28at.com

十、上下文管理器

上下文管理器是 Python 中的一個很好的工具,可以幫助進行資源管理。它們允許您在需要時分配和釋放資源。上下文管理器最常用和最受認可的例子是 with 語句。with 主要用于打開和關閉文件。7KO28資訊網——每日最新資訊28at.com

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

小節

上面分享的10個提供python水平的高級知識點,希望在你工作或面試中有所幫助。7KO28資訊網——每日最新資訊28at.com

在編程的路上,挑戰與精進同在,嘗試學習使用裝飾器 、yield、itertool 之類的高級功能,可以讓你的編程生活變得更加有趣!7KO28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-52167-0.html十個提高Python水平的高級知識點

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

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

下一篇: Hypothesis, 一個很少人會用的Python測試庫

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 紫阳县| 凭祥市| 临潭县| 乌苏市| 京山县| 二连浩特市| 泗水县| 都昌县| 湖口县| 陆丰市| 阿荣旗| 德庆县| 浑源县| 平舆县| 临泽县| 宁阳县| 曲阜市| 丁青县| 三河市| 图们市| 达州市| 乳源| 曲阜市| 淮北市| 昌宁县| 黄陵县| 和田县| 拉孜县| 达孜县| 元阳县| 眉山市| 阳信县| 烟台市| 长汀县| 泽州县| 青铜峡市| 石门县| 阿拉善左旗| 云龙县| 衡水市| 信丰县|