9-什么是迭代器,生成器,裝飾器、django的信號用過嗎?如何用,干過什么、什么是深拷貝,什么是淺拷貝,如何使用、slice操作符和list構造函數

1 什么是迭代器,生成器,裝飾器
2 django的信號用過嗎?如何用,干過什么
3 什么是深拷貝,什么是淺拷貝,如何使用
3.1 淺拷貝
3.2 深拷貝
3.3 擴展(slice操作符和list構造函數)

1 什么是迭代器,生成器,裝飾器


迭代:一種不依賴于索引取值的方式,我們不需要關注它的位置,只要能夠一個個取值,它就稱之為迭代for循環, next()
可迭代對象:可以迭代的(for,next取值的)python中的對象稱之為可迭代對象在python中可以被for循環或可以變量.next()取值的對象稱之為可迭代對象有 :字典,列表,字符串,元組,集合,文件對象
迭代器:可迭代對象調用__iter__,就得到了迭代器,迭代器有__iter__和__next__方法
自定義迭代器:寫個類,類中重寫__iter__和__next__方法,這個類的對象就是迭代器def add():print(1)yield
res=add()生成器:生成器本質就是迭代器,迭代器不一定是生成器函數中只要有 yield 關鍵字,這個函數被調用 函數(),它就變成了生成器生成器表達式,也可以做出生成器  (i+1 for i in [1,2,3])比如有一堆數據,要放到列表中,但 你沒放,而放到了生成器中for 循環生成器---》可以惰性取值,可以節省內存在哪里用過生成器?-讀取文件,for循環內部其實就是在用生成器-我猜測:django中orm 查詢一個表所有內容 Book.objects.all()--->內部應該也是一個生成器-redis  hascan 和 hsacn_iter-類似于這種場景我是可以用到它的:比如我要取數據,但是數據量比較大,不要一次性把把數據取到內存中,而是一點點取值,這樣就可以把它做成一個生成器,可以節約內存裝飾器:本身是一個閉包函數,作用是在不改變 被裝飾對象源代碼和調用方式的基礎上,為它加入新功能flask的路由就是基于裝飾器django的信號也可以用裝飾器方式注冊django中局部去除csrf認證為接口記錄訪問日志認證。。閉包函數:1 定義在函數內部  2 對外部作用域有引用多了一種給函數傳參的方式典型應用就是裝飾器所有語言都有閉包函數---》所有語言就可以實現裝飾器--》但是沒有裝飾器的語法糖def auth(a):
def inner():print(1)print(a)# 裝飾器

2 django的信號用過嗎?如何用,干過什么

django提供的一種通知機制,他是設計模式觀察者模式(發布訂閱),在發生某種變化的時候,通知某個函數執行-23種設計模式:https://www.cnblogs.com/liuqingzheng/p/10038958.html
內置信號:如果是內置信號用起來簡單,只需要寫個函數,跟內置信號綁定,當信號被觸發,函數就會執行-綁定信號,在django中有兩種方式@receiverconnect連接
自定義信號:就比內置信號多了兩步:1 定義信號   2 觸發信號   信號.send使用場景:記錄日志(book插入一條數據就記錄日志)用戶密碼修改,發送郵件通知一旦生成訂單,干xx事數據庫中插入數據,把數據同步到別的位置# 觀察者模式
觀察者模式也叫發布-訂閱模式,其定義如下:
定義對象間一種一對多的依賴關系,使得當該對象狀態改變時,所有依賴于它的對象都會得到通知,并被自動更新

3 什么是深拷貝,什么是淺拷貝,如何使用

# 無論深拷貝還是淺拷貝都是用來  復制對象的
# 如果是淺copy,只會復制一層,如果copy的對象中有可變數據類型,修改可變數據類型還會影響拷貝的對象
# 如果是深copy,完整復制,無論可變或不可變,都是創建出新的來,以后再改原對象,都不會對copy出的對象造成影響淺拷貝和深拷貝是Python中兩種常用的復制對象的方法。1 淺拷貝創建一個新對象,但是這個新對象只是原始對象的一個引用;而深拷貝創建一個新對象,并且這個新對象與原始對象沒有任何關聯。在實際開發中,我們需要根據具體的情況選擇使用哪種方法。2 如果我們需要復制的對象只包含基本數據類型,那么使用淺拷貝就足夠了。但是,如果我們需要復制的對象包含嵌套的對象,那么就需要使用深拷貝。因為淺拷貝只是復制了引用,而深拷貝則會遞歸地復制整個對象樹。除了copy()和deepcopy()方法外,Python還提供了其他一些復制對象的方法,如slice操作符、list()構造
函數等。這些方法也可以用于復制對象,但是它們都只能進行淺拷貝,不能進行深拷貝。-在使用深拷貝時,需要注意以下幾點:1 深拷貝可能會比較耗時,因為它需要遞歸地復制整個對象樹。2 深拷貝可能會導致循環引用的問題。如果被復制的對象中存在循環引用,那么深拷貝會進入死循環,直到Python的最大遞歸深度被達到為止。3 深拷貝可能會導致內存占用過高的問題。如果被復制的對象非常大,那么深拷貝會占用大量的內存。

3.1 淺拷貝

"""
淺拷貝是指創建一個新對象,但是這個新對象只是原始對象的一個引用。
也就是說,在新對象中,原始對象中的所有元素都只是引用。
如果原始對象中的元素發生了變化,那么新對象中的元素也會發生變化。
"""# 1.1 使用方法
# 在Python中,可以使用copy()方法來進行淺拷貝。例如:
# 創建了一個包含一個整數和一個列表的列表,并使用copy()方法將其淺拷貝到了另一個變量中
list1 = [1, 2, [3, 4]]
list2 = list1.copy()
print(list2)  # [1, 2, [3, 4]]# 淺拷貝的工作原理:
list1 = [1, 2, [3, 4]]
list2 = list1.copy()print("list1:", list1)  # list1: [1, 2, [3, 4]]
print("list2:", list2)  # list2: [1, 2, [3, 4]]list1[2][0] = 5  # 修改原始列表中的嵌套列表時,新列表中的相應元素也被修改了print("list1:", list1)  # list1: [1, 2, [5, 4]
print("list2:", list2)  # list2: [1, 2, [5, 4]]

3.2 深拷貝

"""
深拷貝是指創建一個新對象,并且這個新對象與原始對象沒有任何關聯。
也就是說,在新對象中,原始對象中的所有元素都被復制到了新的內存地址中。
如果原始對象中的元素發生了變化,那么新對象中的元素不會受到影響。
"""
# 使用方法
# 在Python中,可以使用deepcopy()方法來進行深拷貝。例如:
# 創建了一個包含一個整數和一個列表的列表,并使用deepcopy()方法將其深拷貝到了另一個變量中。
import copylist1 = [1, 2, [3, 4]]
list2 = copy.deepcopy(list1)print(list2)  # [1, 2, [3, 4]]# 深拷貝的工作原理:
import copylist1 = [1, 2, [3, 4]]
list2 = copy.deepcopy(list1)print("list1:", list1)  # list1: [1, 2, [3, 4]]
print("list2:", list2)  # list2: [1, 2, [3, 4]]list1[2][0] = 5  # 修改原始列表中的嵌套列表時,新列表中的相應元素沒有被修改。
print("list1:", list1)  # list1: [1, 2, [5, 4]]
print("list2:", list2)  # list2: [1, 2, [3, 4]]

3.3 擴展(slice操作符和list構造函數)

1 slice操作符slice操作符可以用于復制列表、元組、字符串等序列類型的對象。例如:a = [1, 2, 3, 4]b = a[:]這里,b就是a的一個淺拷貝,它包含了a中所有元素的副本。由于slice操作符只進行淺拷貝,因此如果a中包含了嵌套的對象,那么b中的這些對象仍然是a中的引用。2. list()構造函數list()構造函數可以用于將其他序列類型的對象轉換為列表,并且可以實現淺拷貝。例如:a = (1, 2, 3, 4)b = list(a)這里,b就是a的一個淺拷貝,它包含了a中所有元素的副本。另外,需要注意的是,Python中的一些內置類型,如intstrtuple等是不可變類型,它們沒有提供
修改自身內容的方法。因此,對這些類型進行淺拷貝和深拷貝是沒有任何區別的。例如:a = 123b = copy.copy(a)c = copy.deepcopy(a)這里,b和c都是a的副本,它們的值都是123。最后,需要注意的是,在Python中,對象的復制和對象的賦值是不同的概念。
對象的賦值只是將一個變量名與一個對象關聯起來,而不是復制對象本身。例如:a = [1, 2, 3]
b = a
這里,b只是a的一個別名,它們實際上指向同一個對象。因此,對a或b進行修改,都會影響到另一個變量。
如果需要復制a的副本,可以使用a.copy()或者copy模塊中的函數。

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

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

相關文章

14 redis全量復制與部分復制

1、設置主服務器的地址和端口 首先是在從服務器設置需要同步的主服務器信息,包括機器IP, 端口。 主從復制的開啟,完全是在從節點發起的。不需要我們在主節點做任何事情。 從節點開啟主從復制,有3種方式 配置文件:在從服務器的配…

【神印王座】龍皓晨美妝勝過月夜,魔神皇識破無視,撮合月夜阿寶

Hello,小伙伴們,我是拾荒君。 《神印王座》國漫第82集已更新,拾荒君和大多數人一樣,更新就去看了。魔神皇楓秀,威嚴凜然,突然空降月魔宮,整個宮殿都在這股無與倫比的強大氣息中顫栗。為了順利躲避魔神皇的…

稻谷飄香金融助力——建行江門市分行助力鄉村振興

7月的臺山,稻谷飄香。在大耕戶李勝業的農田里,金燦燦的稻谷翻起層層稻浪,收割機在稻浪里來回穿梭,割稻、脫粒、裝車等工序一氣呵成。空氣中彌漫著豐收的喜悅。 夏糧迎豐收的背后,是中國建設銀行江門市分行&#xff08…

遠端WWW服務支持TRACE請求

安全掃描的時候,掃出來的問題,這里不分享如何處理,就只分享下,如何找到有問題的端口。 通過命令 curl -v -X TRACE -I ip:port,這里的ip和端口就是掃描出有問題的服務器地址ip以及開放的服務端口。 觀察返回值&#x…

Python基礎:生成器(Generators)和生成器表達式(Generator Expressions)詳解

生成器(Generators)和 生成器表達式(Generator Expressions)是 Python 中用于處理迭代器和序列數據的強大工具。它們允許你按需生成值,而不是一次性生成所有值,從而節省內存和提高性能。 1. 生成器&#x…

深度強化學習筆記與無線通信應用案例

這里寫自定義目錄標題 參考資料比較和分類基礎知識16.3 有模型學習16.3.1 策略評估遞歸形式:Bellman 等式 16.3.2 策略改進16.3.3 策略迭代16.3.3 值迭代 16.4 免模型學習on-policy off-policy16.4.1 蒙特卡羅強化學習16.4.2 時序差分學習Sarsa算法:同策…

睡前隨筆記錄

一個人從出生到長大,就像一部手機從新用到舊。手機里面積累了太多的緩存,積累了太多的照片,各種app的數據,安裝了各式各樣的程序。 所以大概這就是年紀越大,記性越差的原因嗎?就像一個屋子,堆滿…

TableStructureRec: 表格結構識別推理庫來了

目錄 引言lineless_table_rec: 無線表格識別庫安裝使用結果 wired_table_rec:有線表格識別庫安裝使用結果 寫在最后 引言 TableStructureRec 倉庫是用來對文檔中表格做結構化識別的推理庫,包括來自 PaddleOCR 的表格結構識別算法模型、來自阿里讀光有線…

新版Testwell CTC++代碼覆蓋率測試工具帶來哪些新變化?

代碼覆蓋率測試工具Testwell CTC在版本10中引入了新的工具ctcreport來直接從符號和數據文件生成HTML報告。詳細的特性描述可以在測試井CTC幫助中找到。在本文檔中,描述了與前一代報告相比的改進和變化。 Adaptable Layout可調整布局 您可以選擇一個適合于項目結構的…

scanf的返回值

總所周知,scanf是C提供的庫函數的內容,而絕大多數定義的函數都會有一個返回值。 那么scanf的返回值是什么呢? 查了CPP的解釋后,返回值就是返回的是scanf讀取的數據的個數。 這個概念可能比較抽象。先看如下示例: 我們…

QT QJsonObject 插入 QByteArray十六進制數據

場景描述 有一組十六進制數使用QByteArray進行存儲;需要將其插入QJsonObject,然后通過網絡發送出去;接收到后,再轉換回QByteArray; 操作代碼 1. QByteArray轉換QString插入QJsonObject QString str ""; …

io500 壓測

目的 編譯環境 centos 7.9安裝包 yum groupinstall Development\ Tools yum install -y libevent-devel hwloc-devel libcephfs-devel.x86_64 編譯 open mpi 下載地址 https://www.open-mpi.org/software/ompi/v5.0/編譯 rpmbuild --rebuild openmpi-4.1.6-1.src.rpm安裝…

Leetcode 155. 最小棧

class MinStack {//用一個輔助棧存儲對應棧元素為棧頂時的最小值//當原棧插入一個元素時&#xff0c;輔助棧插入此值與當前輔助棧棧頂的值&#xff08;即插入前的最小值&#xff09;的較小值Stack<Integer> sta1;Stack<Integer> sta2;public MinStack() {sta1 new…

Redis(哨兵模式)

哨兵模式的定義&#xff1a; 是Redis的一種高可用解決方案&#xff0c;通過運行多個Redis實例來監控主從Redis實例的狀態&#xff0c;當主實例出現故障時&#xff0c;哨兵會自動選舉一個從實例作為新的主實例&#xff0c;從而保證系統的高可用性。哨兵模式可以監控多個主從Red…

2023亞太杯數學建模競賽C題詳細代碼解析建模

C題&#xff1a;The Development Trend of New Energy Electric Vehicles in China中國談新能源電動汽車的發展趨勢 第一問部分&#xff1a; import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.prep…

Axios 通過a標簽下載文件 跨域下載

<!-- a標簽占位 --><a ref"down" ></a>getTest() {this.$axios.request({url: https://cnv13.55.la/download?file_key3695fa9461a0ae59cf3148581e4fe339&handle_typeexcel2pdf,method: get,responseType: blob, // 切記類型 blob}).then(re…

RC4密碼(python實現)

def RC4_INIT(key):keylist(key)for i in range(len(key)):key[i]ord(key[i]) #需要將key中的每個字符轉換為整數進行異或k[0 for i in range(256)]s[0 for i in range(256)]j0lengthlen(key)for i in range(256):s[i]ik[i]key[i%length] #如果key為123&#xff0c;則實際填充…

實現二叉搜索樹的查找、插入和刪除功能(思路+圖文+代碼詳解)

文章目錄 二叉搜索樹一、搜索樹1.二叉搜索樹的查找2.二叉搜索樹的插入3.二叉搜索樹的刪除4.性能分析 二叉搜索樹 HashMap和HashSet的底層是一個哈希表 TreeMap 和TreeSet底層是一棵搜索樹&#xff08;紅黑樹&#xff09; 涉及到一些搜索查找的場景可以調用Map和Set接口 一、…

Action!錄屏工具免費完整版,錄屏軟件,打開即可解鎖最新完整可用版本,支持GPU加速HDR視頻錄制和播放

一、軟件簡介 本次帶來的錄屏工具已升級為【完整版本】&#xff0c;所有功能全部可用。該錄屏工具支持GPU硬件加速&#xff0c;可以智能識別主流硬件設備&#xff0c;支持通過GPU進行HDR視頻錄制和播放進行。視頻錄制幀率最高支持360FPS&#xff0c;直播視頻幀率最高支持60FPS…

Java反射機制

我是南城余&#xff01;阿里云開發者平臺專家博士證書獲得者&#xff01; 歡迎關注我的博客&#xff01;一同成長&#xff01; 一名從事運維開發的worker&#xff0c;記錄分享學習。 專注于AI&#xff0c;運維開發&#xff0c;windows Linux 系統領域的分享&#xff01; 本…