2024速通python之python高階技巧

文章目錄

  • 一、閉包
    • 1.什么是閉包
    • 2.優缺點
    • 3.nonlocal關鍵字
  • 二、裝飾器
    • 1.什么是裝飾器
    • 2.舉例
    • 3.傳統方式
    • 4.裝飾器方式
    • 5.語法糖寫法
  • 三、多線程
    • 1.線程參數
    • 2.多線程編程
  • 四、網絡編程
    • 1.Socket服務端編程
    • 2.Socket客戶端編程

「章節總覽」
?
??????【2024速通python之python基礎 https://blog.csdn.net/weixin_45404884/article/details/138578955】
??????【2024速通python之python進階 https://blog.csdn.net/weixin_45404884/article/details/138663338】
??????【2024速通python之python高階 https://blog.csdn.net/weixin_45404884/article/details/138810133】
??????【2024速通python之python面向對象https://blog.csdn.net/weixin_45404884/article/details/139473507】
??????【2024速通python之python高階技巧https://blog.csdn.net/weixin_45404884/article/details/139521584】

一、閉包

1.什么是閉包

  • 定義雙層嵌套函數, 內層函數可以訪問外層函數的變量
  • 將內存函數作為外層函數的返回,此內層函數就是閉包函數

這里的inner就是閉包函數,如果需要修改外層函數的outerNum變量,則需要用nonlocal關鍵字來聲明

def outer(outerNum):def inner(innerNum):nonlocal outerNumouterNum = outerNum + 1print(f"Inner function num is {innerNum} and outer function num is {outerNum}")return innerout = outer(100)
out(200)

2.優缺點

  • 優點,使用閉包可以讓我們得到:
    無需定義全局變量即可實現通過函數,持續的訪問、修改某個值
    閉包使用的變量的所用于在函數內,難以被錯誤的調用修改

  • 缺點:
    由于內部函數持續引用外部函數的值,所以會導致這一部分內存空間不被釋放,一直占用內存

3.nonlocal關鍵字

在閉包函數(內部函數中)想要修改外部函數的變量值,需要用nonlocal聲明這個外部變量

二、裝飾器

1.什么是裝飾器

裝飾器其實也是一種閉包, 其功能就是在不破壞目標函數原有的代碼和功能的前提下,為目標函數增加新功能。

2.舉例

將下面的睡覺函數,在調用sleep前后輸出,“我打算睡覺了”、“我起床了”

def sleep():time.sleep(2)print("睡眠中....")sleep()

3.傳統方式

def sleep():time.sleep(2)print("睡眠中....")print("我打算睡覺了")
sleep()
print("我起床了")

4.裝飾器方式

def sleep():time.sleep(2)print("睡眠中....")def outer(func):def inner():print("我打算睡覺了")func()print("我起床了")return innerfn = outer(sleep)
fn()

5.語法糖寫法

簡化了調用,增加@outer注解在調用方法上,相當于java中為某個方法增加切面

def outer(func):def inner():print("我打算睡覺了")func()print("我起床了")return inner@outer
def sleep():time.sleep(2)print("睡眠中....")sleep()

三、多線程

1.線程參數

Python的多線程可以通過threading模塊來實現。

  • target:執行的目標任務名稱
  • args:以元組的方式給執行任務傳參
  • name:線程名
  • daemon:是否設置為守護線程
  • kwargs:以字典方式傳參

2.多線程編程

def sing(msg):print(f"我在唱歌。。。{msg}")def dance(msg):print(f"我在跳舞。。。{msg}")import threadingthread_obj1 = threading.Thread(target=sing, args=('開心!',), name='sing')thread_obj2 = threading.Thread(target=dance, args=('快樂!',), name='dance')thread_obj1.start()
thread_obj2.start()

四、網絡編程

1.Socket服務端編程

主要分為如下幾個步驟:

  • 創建socket對象
  • 綁定socket_server到指定IP和地址
  • 服務端開始監聽端口
  • 接收客戶端連接,獲得連接對象
  • 客戶端連接后,通過recv方法,接收客戶端發送的消息
  • 通過conn(客戶端當次連接對象),調用send方法可以回復消息
  • conn(客戶端當次連接對象)和socket_server對象調用close方法,關閉連接

代碼示例:

import socketsocket_server = socket.socket()
socket_server.bind(('127.0.0.1', 8888))
socket_server.listen()conn, addr = socket_server.accept()
print('Connected by', addr)
while True:data = conn.recv(1024).decode('utf-8')if data == 'exit':breakprint(f"接收到的客戶端數據: {data}")conn.send("你好,我是服務端".encode('utf-8'))conn.close()
socket_server.close()

2.Socket客戶端編程

主要分為如下幾個步驟:

  • 創建socket對象
  • 連接到服務端
  • 發送消息
  • 接收返回消息
  • 關閉鏈接

代碼示例:

import socketsocket_client = socket.socket()
socket_client.connect(('127.0.0.1', 8888))while True:send_msg = input("輸入要發送的消息:")if send_msg == "exit":breaksocket_client.send(send_msg.encode("utf-8"))recv_msg = socket_client.recv(1024)print("服務端回復的消息:", recv_msg.decode("utf-8"))socket_client.close()

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

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

相關文章

超過20W個高質量組件的開源PCB庫

項目介紹 Celestial Altium Library是由Altium行業專家Mark Harris創建的一個龐大的免費開源數據庫庫,專為Altium Designer而設計,庫中包含超過20萬個優質組件 . 特點 高質量數據:Celestial Altium Library注重數據的質量,用戶可…

Day14:響應式網頁

通過媒體查詢、Bootstrap 框架完成騰訊全端網頁響應式布局。 一、響應式布局方案 1、什么是響應式布局 它的主要特點是能夠使網頁根據不同的設備屏幕尺寸(如桌面電腦、平板電腦、手機等)和分辨率自動調整布局和顯示效果,以提供最佳的用戶體…

python的plt.axis()、plt.xlim() 和 plt.ylim()函數

坐標軸相關設置1、plt.axis():坐標軸設置 函數 plt.axis(*v, **kwargs) 主要用于設置坐標軸的屬性,返回值為當前的坐標軸范圍 [xmin, xmax, ymin, ymax],幾種調用方式如下: 調用方式 說明 axis() 返回當前的坐標軸范圍 [xmin, xmax, ymi…

pytorch構建模型訓練數據集

pytorch構建模型訓練數據集 pytorch構建模型訓練數據集1.AlexNet:1.1.導入必要的庫:1.2.數據預處理和增強:1.3.加載數據集:1.4.劃分測試集和訓練集:1.5.創建數據加載器:1.6.加載AlexNet模型:1.7.修改模型以…

qt qDebug兼容LOGE

目錄 普通qDebug用法 qt qDebug兼容LOGE 模板參數2實現 qDebug 實現LOGE一樣的用法,這樣Android和qt同時支持LOGE打印日志 普通qDebug用法 #include <QApplication> #include <QDebug>int main(int argc, char *argv[]) {QApplication app(argc, argv);int ret…

帝國cms接入騰訊云人臉識別認證代碼

利用帝國cms在做一些會員系統的時候&#xff0c;需要做人臉識別認證&#xff0c;之前接入了某api接口&#xff0c;發現身份證識別率真的低&#xff0c;還好充值的少&#xff0c;否則要出問題&#xff0c;后來發現會員注冊率降低了不少&#xff0c;最終還是決定使用騰訊云的人臉…

三十五篇:數字化轉型的引擎:賦能企業的ERP系統全景

數字化轉型的引擎&#xff1a;賦能企業的ERP系統全景 1. 引言 在這個快速變化的數字時代&#xff0c;現代企業面臨著前所未有的挑戰和機遇。企業資源計劃&#xff08;ERP&#xff09;系統&#xff0c;作為數字化轉型的核心&#xff0c;扮演著至關重要的角色。它不僅是企業運營…

第二十六章HTML與CSS書寫規范

1.HTML書寫規范 1.文檔類型聲明及編碼 統一為html5 聲明類型。編碼統一為utf-8。 2.頁面tdk TDK是一個縮寫&#xff0c;其中“T”表示為網頁定義標題&#xff0c;“D”表示為網頁定義描述 description&#xff0c;“K”表示為搜索引擎定義關鍵詞keywords。 1、<title&g…

NFT Insider #133:蘇富比將拍賣BAYC系列NFT,Taiko創世NFT系列已上線

引言&#xff1a;NFT Insider由NFT收藏組織WHALE Members &#xff08;https://twitter.com/WHALEMembers&#xff09;、BeepCrypto &#xff08;https://twitter.com/beep_crypto&#xff09;聯合出品&#xff0c;濃縮每周NFT新聞&#xff0c;為大家帶來關于NFT最全面、最新鮮…

立創·天空星開發板-GD32F407VE-EXTI

本文以 立創天空星開發板-GD32F407VET6-青春版 作為學習的板子&#xff0c;記錄學習筆記。 立創天空星開發板-GD32F407VE-EXTI 中斷硬件觸發中斷示例軟件觸發中斷示例 中斷 中斷分為內部中斷和外部中斷 外部中斷是由外部設備&#xff08;如按鍵、傳感器、通信接口等&#xff09…

rollup.js(入門篇)

前沿 Rollup 是一個用于 JavaScript 的模塊打包工具&#xff0c;它將小的代碼片段編譯成更大、更復雜的代碼&#xff0c;例如庫或應用程序。它使用 JavaScript 的 ES6 版本中包含的新標準化代碼模塊格式&#xff0c;而不是以前的 CommonJS 和 AMD 等特殊解決方案。ES 模塊允許…

如何在Python中處理時間和日期

在Python中處理時間和日期&#xff0c;我們通常使用內置的datetime模塊。這個模塊提供了類來操作日期和時間&#xff0c;包括date、time、datetime、timedelta以及tzinfo。以下是datetime模塊的一些基本用法&#xff1a; 1. 獲取當前日期和時間 python復制代碼 from datetime…

Linux編程for、while循環if判斷以及case語句用法

簡介 語法描述if條件語句if else條件判斷語句if else-if else多條件判斷語句for循環執行命令while循環執行命令until直到條件為真時停止循環case ... esac多選擇語句break跳出循環continue跳出當前循環 1. for 循環 for語句&#xff0c;定量循環&#xff0c;可以遍歷一個列表…

一文讀懂AI時代GPU的內存新寵-HBM

一文讀懂GPU最強輔助&#xff1a;HBM HBM&#xff0c;即高帶寬內存&#xff0c;是一項領先的3D堆疊DRAM技術&#xff0c;專為高性能計算和圖形處理單元&#xff08;GPU&#xff09;設計&#xff0c;滿足其對內存帶寬和容量的極致需求。該技術由AMD與海力士攜手研發&#xff0c;…

Apache安裝教程

目錄 一、Apache知識點 Apache服務簡介 Apache下載網址 Apache的主要特點 二、Apache服務的搭建 1. 關閉防火墻 2. 安裝依賴環境以及編譯工具 3. 將apache安裝包拖入xshell內 4. 解壓壓縮包 5. 進入httpd主包 6. 指定安裝路徑&#xff0c;啟用字符集支持等 7. 優化執…

重慶工商大學社會工作專業試題及答案,分享幾個實用搜題和學習工具 #媒體#學習方法#知識分享

搜題軟件一般都是通過識別題目內容搜索出問題的答案&#xff0c;當識別內容不正確或搜索不到答案時&#xff0c;又得重新到其他軟件進行重復的操作&#xff0c;很是麻煩。所以我們可以使用專業的識別工具&#xff0c;對題目內容進行識別&#xff0c;然后把提取出來的內容單獨保…

流量錄制學習

AREX Cloud | AREX (arextest.com) 流量錄制學習&#xff0c;比vivo的moonbox要好用

android 異屏同顯二.

android主屏: android副屏 | | mediaProjection ----SufaceTextrue ---Open…

【數據結構】平衡二叉樹左旋右旋與紅黑樹

平衡二叉樹左旋右旋與紅黑樹 平衡二叉樹 定義 平衡二叉樹是二叉搜索樹的一種特殊形式。二叉搜索樹&#xff08;Binary Search Tree&#xff0c;BST&#xff09;是一種具有以下性質的二叉樹&#xff1a; 對于樹中的每個節點&#xff0c;其左子樹中的所有節點都小于該節點的值…

【vector模擬實現】附加代碼講解

vector模擬實現 一、看源代碼簡單實現1. push_backcapacity&#xff08;容量&#xff09;sizereserve&#xff08;擴容&#xff09;operator[ ] &#xff08;元素訪問&#xff09; 2. pop_back3. itorator&#xff08;迭代器&#xff09;4.insert & erase &#xff08;頭插…