欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
你應該知道的 9 個(gè)高級 Python 概念

Python 是一種通用編程語(yǔ)言,因其可讀性、面向對象的特性和強大的社區支持而廣受歡迎。除了用于 Web 應用程序之外,Python 還用于數據科學(xué)、人工智能、科學(xué)計算等各個(gè)領(lǐng)域。

因此,如果你一直在考慮進(jìn)入編程領(lǐng)域并尋找一種通用語(yǔ)言,那么 Python 可能適合你。在本文中將分享一些高級 Python 概念,這些概念將幫助您在扎根的同時(shí)取得成功。閱讀本文可以不必是經(jīng)驗豐富的 Python 程序員;它只會(huì )幫助你更好地理解語(yǔ)言并使你成為更好的Python開(kāi)發(fā)人員。

推導式

推導式分為三種類(lèi)型:列表推導、字典推導和集合推導。如果您想從現有的可迭代對象中創(chuàng )建新的列表、字典或集合,請使用推導式。以下代碼片段展示了這些用法

# 創(chuàng )建一個(gè)用于推導式的列表numbers = [1, 2, 3, -3, -2, -1]# 創(chuàng )建一個(gè)包含這些數字的方格的新列表mylist = [x*x for x in numbers][1, 4, 9, 9, 4, 1]# 為這些數字的冪創(chuàng )建一個(gè)新字典mydict = {x: pow(10, x) for x in numbers} # 輸出 {1: 10, 2: 100, 3: 1000, -3: 0.001, -2: 0.01, -1: 0.1}# 創(chuàng )建一組這些數字的絕對值myset = {abs(x) for x in numbers} # 輸出 {1, 2, 3}

這些推導具有相似的語(yǔ)法。以下是對不同形式的簡(jiǎn)要概述。值得注意的是可以設置條件以確保保留所需的元素

列表推導: [expr for x in iterable]字典推導: {key_expr: value_expr for x in iterable}集合推導: {expr for x in iterable}可選條件:[expr for x in iterable if condition] {key_expr: value_expr for x in iterable if condition} {expr for x in iterable if condition}

異常處理

異常是在程序執行期間出現并導致程序中斷的情況。它可能由各種原因而發(fā)生。假設正在構建一個(gè)除法程序,并且分母包含 0,從而導致 ZeroDivisionError。導入不存在的庫或訪(fǎng)問(wèn)不在列表索引中的元素是另外兩個(gè)實(shí)例。Python 帶有大約 30 個(gè)內置異常。

tryexcept塊用于處理python中的異常。except當我們需要同時(shí)處理多個(gè)異常時(shí),我們可以使用多個(gè)塊。

try塊是要執行的指令。except塊包含執行try失敗時(shí)執行的代碼。還有elsefinally塊。else塊僅在try成功執行塊時(shí)執行。finally無(wú)論前一個(gè)塊的結果如何,finally塊將始終執行。

  • 處理單個(gè)異常
try: a = int(input('Enter numerator:') b = int(input('Enter denominator:') c = a / b print(c)except ZeroDivisionError as e: print(e, ' please provide a non zero denominator')
  • 處理多個(gè)異常
import systry:   f = open('myfile.txt')    s = f.readline()   i = int(s.strip())except OSError as err:   print('OS error: {0}'.format(err))except ValueError:   print('Could not convert data to an integer.')except:   print('Unexpected error:', sys.exc_info()[0])   raisefinally:   print('Operation Successfully Done!!')(Example Taken From Official Python Docs)

集合庫

  • Counter

將可迭代對象作為輸入并返回一個(gè)字典,其中鍵是可迭代元素,值是它們各自在原始可迭代對象中出現的次數。

from collections import Counterdata = [1,1,1,1,2,3,4,3,3,5,6,7,7]count = Counter(data)print(count)## Counter({1: 4, 3: 3, 7: 2, 2: 1, 4: 1, 5: 1, 6: 1})
  • nametuple

生成可以使用名字來(lái)訪(fǎng)問(wèn)元素內容的tuple子類(lèi),命名元組賦予每個(gè)位置一個(gè)含義,提供可讀性和自文檔性。

from collections import namedtupleDirection = namedtuple('Direction','N,S,E,W')dt = Direction(4,74,0,0)print(dt)# Direction(N=4, S=74, E=0, W=0)
  • OrderedDict

這是一個(gè)記憶鍵插入順序的字典結構。最新版本的 python 中字典已經(jīng)包含了這個(gè)特性。

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

這是一個(gè)字典結構,當訪(fǎng)問(wèn)結構中不存在的鍵時(shí)將返回默認值,而不是引發(fā)錯誤。

from collections import defaultdict dictt = defaultdict(int) dictt['a'] = 2 print(dictt['a']) ##返回值print(dictt['b']) ##返回默認值# 2 # 0
  • deque

雙端隊列,可以快速的從另外一側追加和推出對象,deque是一個(gè)雙向鏈表,針對list連續的數據結構插入和刪除進(jìn)行優(yōu)化。它提供了兩端都可以操作的序列,這表示在序列的前后你都可以執行添加或刪除操作。

from collections import dequed = deque('abc') d.append('d') print(d)# deque(['a', 'b', 'c', 'd'])# appendleft 添加元素到左端d.appendleft('e')print(d)# deque(['e','a', 'b', 'c', 'd'])# clear 清除所有元素d.clear()print(d)# deque([])還有一些經(jīng)常用的方法比如pop,copy,count,extend,index,insert,popleft,remove,reverse,maxlen

迭代工具

Python itertools 模塊提供了適用于迭代器的各種函數。

  • product(iterable,iterable)兩個(gè)迭代的笛卡爾積
  • permutation(iterable)沒(méi)有重復元素的所有可能排列
  • combinations(iterable,n)來(lái)自可迭代的 n 個(gè)元素的所有可能組合,無(wú)需替換
  • combinations_with_replacement(iterable,n)來(lái)自可迭代的 n 個(gè)元素的所有可能組合與替換
  • accumulate(iterable)返回可迭代的元素的累積和
  • groupby(iterable, key=FUNC)從可迭代對象中返回具有連續鍵和組的迭代器

裝飾器

裝飾器是 Python 中修改函數和類(lèi)行為的一種方式。它們允許您通過(guò)添加方法或更改參數來(lái)更改功能,或通過(guò)添加屬性來(lái)更改類(lèi)。裝飾器函數@在函數名之前有一個(gè),具體我有文章詳細說(shuō)明了裝飾器感興趣可以看一下:

例如,如果想在每次調用“my_function”函數時(shí)記錄日志,可以這樣編寫(xiě)代碼:

def logging_func(original_func):    def wrapper(*args, **kwargs):        print(f'Called {original_func.__name__} with', args, kwargs)        return original_func(*args, **kwargs)    return wrapper@logging_funcdef add(a, b):    return a   bresult = add(5, 6)print(result)

讓我們解釋上面的裝飾器的例子——首先,我們有一個(gè)函數名add,它的工作是獲取兩個(gè)變量并返回它們的總和?,F在經(jīng)過(guò)一段時(shí)間的工作,我們意識到需要將功能記錄到相同的函數中?,F在我們有兩個(gè)選擇,第一個(gè)是在同一個(gè)add函數中添加函數調用日志代碼,或者我們可以使用裝飾器添加功能而不顯式更改函數。為了使用裝飾器,我們首先定義了一個(gè)裝飾器函數。該函數original_func作為輸入。然后,我們有另一個(gè)功能。它是一個(gè)具有*args, **kwargs函數參數的包裝函數。有了這些,現在都定義為參數,我們可以在函數內傳遞任意數量的參數。在包裝函數的主體中,我們有日志功能的邏輯。當我們add使用一些參數調用函數時(shí)add(5,6),輸出將是:

生成器

生成器是一個(gè)返回可迭代值序列的函數。與一次返回所有元素并消耗整個(gè)列表長(cháng)度的內存的列表不同,生成器會(huì )一個(gè)一個(gè)地生成項目。它至少包含一個(gè)yield聲明。yield是python中的一個(gè)關(guān)鍵字,用于從函數返回值而不破壞其當前狀態(tài)或對局部變量的引用。帶有yield關(guān)鍵字的函數稱(chēng)為生成器,比如最經(jīng)典的面試題斐波那契數列

def fibon(limit): a,b = 0,1 while a < limit: yield a a, b = b, a bfor x in fibon(10): print (x)

魔術(shù)方法

Magic方法,__方法名前后有兩個(gè)下劃線(xiàn)。在某個(gè)動(dòng)作上,這些方法直接從類(lèi)中調用。當使用*a 符號將兩個(gè)數字相乘時(shí),將__mul__調用內部過(guò)程。

num =  5num*6>> 30num.__mul__(6)>>30

通常,這些方法用于重載預定義的運算符。例如,數字運算符 ,-,*,/必須在數字對象周?chē)褂?,?/span> 也可以用于連接兩個(gè)字符串。因此,我們可能會(huì )爭辯說(shuō), 操作符在執行字符串連接消耗的內存大。

5 6>>11'python' 'programming'>> 'pythonprogramming'

哈希性

在學(xué)習 Python 字典時(shí),我們了解到鍵必須是可散列的??晒J鞘裁匆馑??Hashable 基本上表示一個(gè) Python 對象可以被散列,也就是散列的行為。下圖描述了散列的工作流程。

散列是使用散列函數(也稱(chēng)為散列器)(在圖中稱(chēng)為散列)將 Python 對象(在圖中稱(chēng)為鍵)轉換為數字散列值的過(guò)程。使用內置的 hash() 方法來(lái)獲取 Python 對象的哈希值是一種判斷它是否存在的簡(jiǎn)單方法。如果對象不可散列,Python 將拋出 TypeError 異常。

# Get an string object’s hash valuehash('This is me')5361907397716593195 # Get a tuple object’s hash valuehash((1,2))-3550055125485641917 # Get a list object’s hash valuehash([1, 2, 3])Traceback (most recent call last): File “<stdin>”, line 1, in <module>TypeError: unhashable type: 'list’ # Get a dict object’s hash valuehash({“a”: 1, “b”: 2})Traceback (most recent call last): File “<stdin>”, line 1, in <module>TypeError: unhashable type: 'dict’

特別是散列需要時(shí)間,并且比構造列表和元組要慢。那么,為什么我們首先要費心使用散列創(chuàng )建字典呢?在類(lèi)似的問(wèn)題上,你可能聽(tīng)說(shuō)過(guò)設置項也必須是可散列的。字典和集合都需要在底層創(chuàng )建哈希表。以下代碼片段演示了特定對象的哈希性如何影響它們作為字典鍵的適用性。哈希最顯著(zhù)的好處是它們在檢索字典元素時(shí)提供即時(shí)查找時(shí)間(即 O(1) 時(shí)間復雜度)。檢查特定項目是否在集合中需要相同的時(shí)間。換句話(huà)說(shuō),使用散列作為實(shí)現機制減少了在后臺使用散列表的開(kāi)銷(xiāo),同時(shí)提高了一些常見(jiàn)操作(如項目檢索、項目插入和項目驗證)的效率。

import randomimport timeit# Create a function to check the look up timedef dict_look_up_time(n): numbers = list(range(n)) random.shuffle(numbers) d0 = {x: str(x) for x in numbers} random_int = random.randint(0, n 1) t0 = timeit.timeit(lambda: d0[random_int], number=10000) return t0for n in (10, 100, 1000, 10000, 100000): elapse_time = dict_look_up_time(n) print(f”*** N = {n:<8}: {elapse_time:.5f}”)*** N = 10 : 0.00114*** N = 100 : 0.00256*** N = 1000 : 0.00291*** N = 10000 : 0.00207*** N = 100000 : 0.00286

上面的代碼生成一些隨機整數來(lái)確定項目獲取的平均查找時(shí)間,來(lái)模擬真實(shí)情況。如你所見(jiàn),即使字典中有 100,000 個(gè)條目,查找時(shí)間也幾乎相同,這證明了使用哈希表作為字典存儲機制的好處。

線(xiàn)程和多處理

線(xiàn)程和多處理是同時(shí)運行多個(gè)腳本的兩種方法。線(xiàn)程是進(jìn)程中的一個(gè)實(shí)體,進(jìn)程是程序的一個(gè)實(shí)例。

多處理是一種技術(shù),其中許多進(jìn)程同時(shí)在不同的 CPU 上運行。線(xiàn)程是一種技術(shù),其中許多線(xiàn)程同時(shí)運行以完成不同的任務(wù)。讓我們看一個(gè)線(xiàn)程可能派上用場(chǎng)的例子。假設你有一個(gè)需要時(shí)間才能完成的函數,并且需要使用不同的參數一次又一次地執行它。你可以使用線(xiàn)程通過(guò)使用不同參數并行執行函數來(lái)加快此過(guò)程。當你想將相同類(lèi)型的代碼用于重復性任務(wù)(例如,處理多個(gè)圖像)時(shí),多處理可能會(huì )派上用場(chǎng)。你可以使用多處理,以便同時(shí)使用所有處理器,而不是在單個(gè)處理器上運行此任務(wù)。具體我有文章詳細的說(shuō)明了Python多線(xiàn)程的使用方法及一些案例,如果感興趣請閱讀:

希望給你帶來(lái)幫助,Happy Code!

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Python3內置函數enumerate()
一天速成Python教程
python循環(huán)zip與enumerate
16個(gè)鮮為人知的 Python 小眾技巧,讓你的代碼更加簡(jiǎn)潔高效
Python第十一章-常用的核心模塊01-collections模塊
收獲頗多,從5個(gè)維度總結python數據結構的關(guān)系,發(fā)現了這些技巧
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久