python高級特性

json.dumps({a:1,n:2}) #Python 字典類型轉換為 JSON 對象。相當于jsonify
data2 = json.loads(json_str)#將 JSON 對象轉換為 Python 字典
異步編程:在異步編程中,程序可以啟動一個長時間運行的任務,然后繼續執行其他任務,而無需等待該任務完成。
基于async & await關鍵字的協程可以實現異步編程,這也是目前python異步相關的主流技術。協程通過 async def 關鍵字定義,并通過 await 關鍵字暫停執行,等待異步操作完成。

import asyncioasync def func1():print(1)await asyncio.sleep(2)print(2)async def func2():print(3)await asyncio.sleep(2)print(4)tasks = [asyncio.ensure_future(func1()),asyncio.ensure_future(func2())
]loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))

生成器
在 Python 中,使用了 yield 的函數被稱為生成器(generator)。當在生成器函數中使用 yield 語句時,函數的執行將會暫停,并將 yield 后面的表達式返回。然后,每次調用 next() 方法或用for循環迭代時,函數會從上次暫停的地方繼續執行,直到再次遇到 yield 語句。這樣,生成器函數可以逐步產生值,而不需要一次性計算并返回所有結果。

lambda匿名函數語法格式:
lambda arguments: expression
lambda是 Python 的關鍵字,用于定義 lambda 函數。
arguments 是參數列表,可以包含零個或多個參數,但必須在冒號(:)前指定。
expression 是一個表達式,用于計算并返回函數的結果。

x = lambda a : a + 10
print(x(5))#15

裝飾器:
Python 裝飾器允許在不修改原有函數代碼的基礎上,動態地增加或修改函數的功能。將原始函數作為輸入,返回一個wrapper對象。

def decorator_function(original_function):def wrapper(*args, **kwargs):# 這里是在調用原始函數前添加的新功能before_call_code()result = original_function(*args, **kwargs)# 這里是在調用原始函數后添加的新功能after_call_code()return resultreturn wrapper# 使用裝飾器
@decorator_function
def target_function(arg1, arg2):pass  # 原始函數的實現

當我們使用 @decorator_function 前綴在 target_function 定義前,Python會自動將 target_function 作為參數傳遞給 decorator_function,然后用返回的 wrapper 函數替換掉原來的 target_function。

異常:
Python 使用 raise 語句拋出一個指定的異常。

x = 10
if x > 5:raise Exception('x 不能大于 5。x 的值為: {}'.format(x))

raise 唯一的一個參數指定了要被拋出的異常。如果你只想知道這是否拋出了一個異常,并不想去處理它,那么一個簡單的 raise 語句就可以再次把它拋出。

在這里插入圖片描述
線程同步
如果多個線程共同對某個數據修改,則可能出現不可預料的結果,為了保證數據的正確性,需要對多個線程進行同步。

使用 Thread 對象的 Lock 和 Rlock 可以實現簡單的線程同步,這兩個對象都有 acquire 方法和 release 方法,對于那些需要每次只允許一個線程操作的數據,可以將其操作放到 acquire 和 release 方法之間。

考慮這樣一種情況:一個列表里所有元素都是 0,線程 “set” 從后向前把所有元素改成 1,而線程 “print” 負責從前往后讀取列表并打印。
那么,可能線程"set"開始改的時候,線程"print"便來打印列表了,輸出就成了一半0一半1,這就是數據的不同步。為了避免這種情況,引入了鎖的概念。
每當一個線程比如"set"要訪問共享數據時,必須先獲得鎖定;如果已經有別的線程比如"print"獲得鎖定了,那么就讓線程"set"暫停,也就是同步阻塞;等到線程"print"訪問完畢,釋放鎖以后,再讓線程"set"繼續。

#!/usr/bin/python3import threading
import timeclass myThread (threading.Thread):def __init__(self, threadID, name, delay):threading.Thread.__init__(self)self.threadID = threadIDself.name = nameself.delay = delaydef run(self):print ("開啟線程: " + self.name)# 獲取鎖,用于線程同步threadLock.acquire()print_time(self.name, self.delay, 3)# 釋放鎖,開啟下一個線程threadLock.release()def print_time(threadName, delay, counter):while counter:time.sleep(delay)print ("%s: %s" % (threadName, time.ctime(time.time())))counter -= 1threadLock = threading.Lock()
threads = []# 創建新線程
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)# 開啟新線程
thread1.start()
thread2.start()# 添加線程到線程列表
threads.append(thread1)
threads.append(thread2)# 等待所有線程完成
for t in threads:t.join()
print ("退出主線程")

線程優先級隊列( Queue)

#!/usr/bin/python3import queue
import threading
import timeexitFlag = 0class myThread (threading.Thread):def __init__(self, threadID, name, q):threading.Thread.__init__(self)self.threadID = threadIDself.name = nameself.q = qdef run(self):print ("開啟線程:" + self.name)process_data(self.name, self.q)print ("退出線程:" + self.name)def process_data(threadName, q):while not exitFlag:queueLock.acquire()if not workQueue.empty():data = q.get()queueLock.release()print ("%s processing %s" % (threadName, data))else:queueLock.release()time.sleep(1)threadList = ["Thread-1", "Thread-2", "Thread-3"]
nameList = ["One", "Two", "Three", "Four", "Five"]
queueLock = threading.Lock()
workQueue = queue.Queue(10)
threads = []
threadID = 1# 創建新線程
for tName in threadList:thread = myThread(threadID, tName, workQueue)thread.start()threads.append(thread)threadID += 1# 填充隊列
queueLock.acquire()
for word in nameList:workQueue.put(word)
queueLock.release()# 等待隊列清空
while not workQueue.empty():pass# 通知線程是時候退出
exitFlag = 1# 等待所有線程完成
for t in threads:t.join()
print ("退出主線程")

元類:
在Python中,type類型位于類型體系的頂端,它不僅是所有內置類型的元類,也是用戶自定義類的默認創建者。這種設計形成了獨特的自舉系統——type的元類就是它自身。
元類可以理解為:
類的模板:決定類如何被構造
類的工廠:實際生產類對象的機器
類的類型:所有類對象的類型標識

當解釋器執行class語句時,實際發生的是:
1、收集類命名空間(屬性和方法)
2、解析繼承關系
3、調用元類的__new__和__init__方法
4、返回最終的類對象

元類工作機制深度剖析:

class DetailMeta(type):def __new__(cls, name, bases, namespace):print(f"[1] 進入元類 __new__")print(f"    類名: {name}")print(f"    基類: {bases}")print(f"    命名空間: {namespace.keys()}")return super().__new__(cls, name, bases, namespace)def __init__(cls, name, bases, namespace):print(f"[2] 進入元類 __init__")super().__init__(name, bases, namespace)def __call__(cls, *args, **kwargs):print("[3] 進入元類 __call__")return super().__call__(*args, **kwargs)class MyClass(metaclass=DetailMeta):version = 1.0def __init__(self, value):self.value = valueprint("[4] 開始實例化")
obj = MyClass(100)

輸出結果:

[1] 進入元類 __new__類名: MyClass基類: ()命名空間: dict_keys(['__module__', '__qualname__', 'version', '__init__'])
[2] 進入元類 __init__
[4] 開始實例化
[3] 進入元類 __call__

new:負責類的實際創建

init:完成類的初始化

call:控制實例化過程

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80857.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80857.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80857.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu24離線安裝docker

一、確認ubuntu版本 root@dockerserver:/etc/pam.d# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 24.04.2 LTS Release: 24.04 Codename: noble 根據codename確認。 docker官方網址下載 https://download.docker.com/linux/…

索尼(sony)攝像機格式化后mp4的恢復方法

索尼(sony)的Alpha 7 Ⅳ系列絕對稱的上是索尼的“全畫幅標桿機型”,A7M4配備了3300萬像素的CMOS,以及全新研發的全畫幅背照式Exmor R?CMOS影像傳感器,搭載BIONZ XR?影像處理器,與旗艦微單?Alpha 1如出一轍。下面我們來看看A7M4…

2025最新出版 Microsoft Project由入門到精通(七)

目錄 優化資源——在資源使用狀況視圖中查看資源的負荷情況 在資源圖表中查看資源的負荷情況 優化資源——資源出現沖突時的原因及處理辦法 資源過度分類的處理解決辦法 首先檢查任務工時的合理性并調整 增加資源供給 回到資源工作表中雙擊對應的過度分配資源 替換資…

最短路與拓撲(1)

1、找最長良序字符串 #include<bits/stdc.h> using namespace std; const int N105; int dis[N]; int vis[N]; int edge[N][N]; int n,m; int vnum;void dij(int u, int v) {// 初始化距離數組和訪問標記for(int i0; i<vnum; i) {vis[i] 0;dis[i] edge[u][i];}// D…

降低60.6%碰撞率!復旦大學地平線CorDriver:首次引入「走廊」增強端到端自動駕駛安全性

導讀 復旦大學&地平線新作-CorDriver: 首次通過引入"走廊"作為中間表征&#xff0c;揭開一個新的范式。預測的走廊作為約束條件整合到軌跡優化過程中。通過擴展優化的可微分性&#xff0c;使優化后的軌跡能無縫地在端到端學習框架中訓練&#xff0c;從而提高安全…

CSS flex:1

在 CSS 中&#xff0c;flex: 1 是一個用于彈性布局&#xff08;Flexbox&#xff09;的簡寫屬性&#xff0c;主要用于控制 flex 項目&#xff08;子元素&#xff09;如何分配父容器的剩余空間。以下是其核心作用和用法&#xff1a; 核心作用 等分剩余空間&#xff1a;讓 flex …

1.6 關于static和final的修飾符

一.static static是靜態修飾符&#xff0c;用于修飾類成員&#xff08;變量&#xff0c;方法&#xff0c;代碼塊&#xff09; 被修飾的類成員屬于類&#xff0c;不必生成示例&#xff0c;即可直接調用屬性或者方法。 關于代碼塊&#xff0c;被static修飾的代碼塊是靜態代碼塊…

數據結構—(鏈表,棧,隊列,樹)

本文章寫的比較亂&#xff0c;屬于是縫合怪&#xff0c;很多細節沒處理&#xff0c;顯得粗糙&#xff0c;日后完善&#xff0c;今天趕時間了。 1. 紅黑樹的修復篇章 2. 紅黑樹的代碼理解&#xff08;部分寫道注釋之中了&#xff09; 3. 隊列與棧的代碼 4. 重要是理解物理邏輯&a…

每日Prompt:發光線條解剖圖

提示詞 一幅數字插畫&#xff0c;描繪了一個 [SUBJECT]&#xff0c;其結構由一組發光、干凈且純凈的藍色線條勾勒而成。畫面設定在深色背景之上&#xff0c;以突出 [SUBJECT] 的形態與特征。某個特定部位&#xff0c;如 [PART]&#xff0c;通過紅色光暈加以強調&#xff0c;以…

【時時三省】(C語言基礎)使用字符串處理函數

山不在高&#xff0c;有仙則名。水不在深&#xff0c;有龍則靈。 ----CSDN 時時三省 在C函數庫中提供了一些用來專門處理字符串的函數&#xff0c;使用方便。幾乎所有版本的C語言編譯系統都提供這些函數。下面介紹幾種常用的函數。 ①puts函數 輸出字符串的函數 其一般形式…

構建可信數據空間需要突破技術、規則和生態三大關鍵

構建可信數據空間需要突破技術、規則和生態三大關鍵&#xff1a;技術上要解決"可用不可見"的隱私計算難題&#xff0c;規則上要建立動態確權和跨境流動的治理框架&#xff0c;生態上要形成多方協同的標準體系。他強調&#xff0c;只有實現技術可控、規則可信、生態協…

模板的使用

模板 模板的概念&#xff1a;模板就是建立一個通用的模具&#xff0c;大大提高復用性 c中模板機制分為兩類 函數模板 建立一個通用函數&#xff0c;其函數返回值類型和形參類型可以不具體定制&#xff0c;用一個虛擬的類型來代表 template<typename T> //template 聲…

YOLOv1:開啟實時目標檢測的新篇章

YOLOv1&#xff1a;開啟實時目標檢測的新篇章 在深度學習目標檢測領域&#xff0c;YOLO&#xff08;You Only Look Once&#xff09;系列算法無疑占據著重要地位。其中&#xff0c;YOLOv1作為開山之作&#xff0c;以其獨特的設計理念和高效的檢測速度&#xff0c;為后續的目標…

vim中的查找

在 Vim 中&#xff0c;使用 n 鍵可以按正向&#xff08;向下&#xff09;繼續查找下一個匹配項。若要反向&#xff08;向上&#xff09;查找&#xff0c;可以使用以下方法&#xff1a; 1. 使用 N 鍵反向查找 在查找命令&#xff08;如 /keyword&#xff09;后&#xff0c;按下…

卡爾曼濾波通俗理解

卡爾曼濾波器的目的與意義何在&#xff1f; - 陳不陳的回答 - 知乎 https://www.zhihu.com/question/41351736/answer/3057034500 這是一個比較通俗易懂的例子&#xff0c;讀完之后可以對卡爾曼濾波怎么使用有比較直觀的理解。 &#x1f9e0; 一、卡爾曼濾波是什么&#xff1f;…

對抗帕金森:在疾病陰影下,如何重掌生活主動權?

帕金森病&#xff0c;一種影響全球超 1000 萬人的神經退行性疾病&#xff0c;正無聲地改變著患者的生活軌跡。隨著大腦中多巴胺分泌減少&#xff0c;患者逐漸出現肢體震顫、肌肉僵硬、步態遲緩等癥狀&#xff0c;甚至連扣紐扣、端水杯這類日常動作都變得艱難。更棘手的是&#…

黑馬k8s(五)

1.Namespace 2.Pod run nginx&#xff1a;nginx是pod控制器的名稱&#xff0c;不是pod的名稱 查看pod更高的參數&#xff1a; 啟動一個不存在的鏡像&#xff1a;pod 查看 dev下面的pod&#xff0c;第二個pod處于容器創建的狀態 查看pod的詳情描述&#xff1a; 通過pod的ip&…

推薦算法工程化:ZKmall模板商城的B2C 商城的用戶分層推薦策略

在 B2C 電商競爭激烈的市場環境中&#xff0c;精準推薦已成為提升用戶體驗、促進商品銷售的關鍵。ZKmall 模板商城通過推薦算法工程化手段&#xff0c;深度挖掘用戶數據價值&#xff0c;制定科學的用戶分層推薦策略&#xff0c;實現 “千人千面” 的個性化推薦&#xff0c;幫助…

如何使用 Qwen3 實現 Agentic RAG?

今天&#xff0c;我們將學習如何部署由阿里巴巴最新Qwen 3驅動的Agentic RAG。 這里是我們的工具棧&#xff1a; CrewAI用于代理編排。 Firecrawl用于網絡搜索。 LightningAI的LitServe用于部署。 頂部的視頻展示了這一過程。 圖表顯示了我們的Agentic RAG流程&#xff1…

【UAP】《Empirical Upper Bound in Object Detection and More》

Borji A, Iranmanesh S M. Empirical upper bound in object detection and more[J]. arXiv preprint arXiv:1911.12451, 2019. arXiv-2019 文章目錄 1、Background and Motivation2、Related Work3、Advantages / Contributions4、Experimental Setup4.1、Benchmarks Dataset…