国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python-VBA函數(shù)之旅-id函數(shù)

這篇具有很好參考價值的文章主要介紹了Python-VBA函數(shù)之旅-id函數(shù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一、id函數(shù)的常見應(yīng)用場景:

二、id函數(shù)使用注意事項(xiàng):

1、id函數(shù):

1-1、Python:

1-2、VBA:

2、推薦閱讀:

個人主頁:神奇夜光杯-CSDN博客?


Python-VBA函數(shù)之旅-id函數(shù),Myelsa的Python函數(shù)之旅,python,開發(fā)語言,數(shù)據(jù)結(jié)構(gòu),算法,leetcode,javascript,前端


一、id函數(shù)的常見應(yīng)用場景:

????????id函數(shù)在Python中有一些實(shí)際應(yīng)用場景,盡管它在日常編程中并不常用,常見的應(yīng)用場景有:

1、調(diào)試和內(nèi)存管理:在開發(fā)過程中,特別是在處理復(fù)雜的數(shù)據(jù)結(jié)構(gòu)或進(jìn)行性能優(yōu)化時,id()函數(shù)可以用來檢查對象是否在內(nèi)存中被正確地創(chuàng)建和銷毀,通過比較對象的id,可以追蹤對象的生命周期,以及檢測是否發(fā)生了意外的對象復(fù)制或重復(fù)創(chuàng)建。

2、檢查對象是否相同:雖然通常我們使用`==`操作符來比較兩個對象的值是否相等,但id()函數(shù)可以用來檢查兩個引用是否指向內(nèi)存中的同一個對象,這在某些情況下可能是有用的,特別是當(dāng)你需要確保兩個引用不指向同一個可變對象,以避免意外的共享狀態(tài)。

3、單例模式實(shí)現(xiàn):在單例模式中,確保一個類只有一個實(shí)例,并提供一個全局訪問點(diǎn),在實(shí)現(xiàn)單例時,id()函數(shù)可以用來檢查是否已經(jīng)創(chuàng)建了實(shí)例,從而避免重復(fù)創(chuàng)建。

4、性能分析和優(yōu)化:id()函數(shù)可以幫助你了解對象的創(chuàng)建和銷毀情況,這對于性能分析和優(yōu)化可能是有用的。例如,如果你發(fā)現(xiàn)某個函數(shù)在每次調(diào)用時都創(chuàng)建了大量的臨時對象,這可能會導(dǎo)致不必要的內(nèi)存分配和垃圾回收開銷,通過檢查這些對象的id,你可以確定它們是否在每次調(diào)用時都被重新創(chuàng)建。

5、緩存和重用對象:在某些情況下,你可能希望重用已經(jīng)創(chuàng)建過的對象,而不是每次都創(chuàng)建新的對象,通過存儲對象的id,你可以檢查是否已經(jīng)創(chuàng)建了具有相同屬性或狀態(tài)的對象,并重用它們而不是創(chuàng)建新的。

????????注意,id()函數(shù)返回的是對象的內(nèi)存地址,這取決于Python解釋器的實(shí)現(xiàn)和當(dāng)前的內(nèi)存狀態(tài)。因此,它不應(yīng)該被用于一般的對象比較或邏輯判斷,在大多數(shù)情況下,應(yīng)該使用`==`操作符來比較對象的值,使用`is`操作符來比較對象的身份(即它們是否指向同一個對象)。

Python-VBA函數(shù)之旅-id函數(shù),Myelsa的Python函數(shù)之旅,python,開發(fā)語言,數(shù)據(jù)結(jié)構(gòu),算法,leetcode,javascript,前端

二、id函數(shù)使用注意事項(xiàng):

????????在Python中使用id()函數(shù)時,需要注意以下幾點(diǎn):

1、不要依賴特定的id值:id()函數(shù)返回的是對象的“標(biāo)識”或內(nèi)存地址,這個值依賴于Python解釋器的實(shí)現(xiàn)和當(dāng)前內(nèi)存狀態(tài)。因此,不要編寫依賴于特定id值的代碼,因?yàn)椴煌\(yùn)行時刻或不同解釋器中的相同對象可能會有不同的id。

2、不要用于比較對象的相等性:即使兩個對象具有相同的值,它們的id也可能不同,因?yàn)樗鼈兪莾?nèi)存中的不同實(shí)例。相反,即使兩個對象的id相同,也不意味著它們的值一定相等(盡管在對象的生命周期內(nèi),id相同的對象必然是同一個對象),因此,不要使用id()函數(shù)來比較對象的相等性,而應(yīng)該使用`==`操作符。

3、不要用于跨不同解釋器或會話的對象比較:由于id()返回的是內(nèi)存地址,這個地址只在當(dāng)前的Python解釋器實(shí)例和會話中有效,如果你試圖在不同的解釋器實(shí)例或會話之間比較對象的id,那么這將沒有意義,因?yàn)槊總€解釋器實(shí)例都有自己獨(dú)立的內(nèi)存空間。

4、不要用于跨不同程序執(zhí)行的對象比較:即使在同一解釋器會話中,如果你在不同的程序執(zhí)行(例如,通過多次啟動Python腳本)中創(chuàng)建相同的對象,它們的id也可能不同,因?yàn)槊看螆?zhí)行時內(nèi)存布局都可能發(fā)生變化。

5、不要用于對象的持久化存儲:id()函數(shù)返回的id是特定于當(dāng)前內(nèi)存布局的,因此不應(yīng)該用于對象的持久化存儲或跨不同執(zhí)行環(huán)境的比較。如果你需要跨不同執(zhí)行環(huán)境或持久化存儲中唯一標(biāo)識對象,應(yīng)該使用其他機(jī)制,如UUID或數(shù)據(jù)庫主鍵。

6、注意對象回收和內(nèi)存重用:當(dāng)對象被垃圾回收后,其id可能會被重新分配給新創(chuàng)建的對象,因此,不要假設(shè)已刪除對象的id永遠(yuǎn)不會再次被使用。

7、謹(jǐn)慎用于性能優(yōu)化:雖然id()函數(shù)有時可以用于性能分析和內(nèi)存優(yōu)化,但通常更好的做法是使用Python內(nèi)置的分析工具(如`memory_profiler`)或?qū)iT的性能分析工具。直接依賴id()函數(shù)進(jìn)行性能優(yōu)化可能會使代碼難以理解和維護(hù)。

????????總之,id()函數(shù)主要用于調(diào)試和內(nèi)部檢查,而不是用于常規(guī)的編程邏輯或?qū)ο蟊容^,在編寫代碼時,應(yīng)該盡量避免依賴對象的id,而是使用更穩(wěn)定、更可預(yù)測的比較和標(biāo)識機(jī)制。

Python-VBA函數(shù)之旅-id函數(shù),Myelsa的Python函數(shù)之旅,python,開發(fā)語言,數(shù)據(jù)結(jié)構(gòu),算法,leetcode,javascript,前端

1、id函數(shù):
1-1、Python:
# 1.函數(shù):id
# 2.功能:用于獲取對象的內(nèi)存地址
# 3.語法:id(object)
# 4.參數(shù):object,對象
# 5.返回值:一個整數(shù),返回對象的內(nèi)存地址
# 6.說明:
# 6-1、返回一個整數(shù),在此對象的生命周期中保證是唯一且恒定的
# 6-2、兩個生命期不重疊的對象可能具有相同的id()值
# 7.示例:
# 應(yīng)用1:調(diào)試和內(nèi)存管理
# 理解對象身份
# 創(chuàng)建兩個相同的整數(shù)對象
a = 10
b = 10
# 打印它們的id
print(f"ID of a: {id(a)}")
print(f"ID of b: {id(b)}")
# 由于Python對小的整數(shù)進(jìn)行了緩存,所以a和b可能指向同一個對象
# 因此,它們的id可能相同
# ID of a: 140715802354760
# ID of b: 140715802354760

# 理解對象賦值
# 創(chuàng)建一個列表對象
list1 = [3, 5, 6]
print(f"ID of list1: {id(list1)}")
# 將list1賦值給list2
list2 = list1
print(f"ID of list2: {id(list2)}")
# list1和list2指向同一個對象,所以它們的id相同
# ID of list1: 2581367673280
# ID of list2: 2581367673280

# 理解對象復(fù)制
# 創(chuàng)建一個列表對象
list1 = [3, 5, 6]
print(f"ID of list1: {id(list1)}")
# 使用切片操作復(fù)制list1
list2 = list1[:]
print(f"ID of list2: {id(list2)}")
# list2是list1的一個新副本,所以它們有不同的id
# ID of list1: 2333963122432
# ID of list2: 2333963122560

# 理解對象在內(nèi)存中的變化
# 創(chuàng)建一個列表對象
list1 = [3, 5, 6]
print(f"ID of list1 before modification: {id(list1)}")
# 修改列表
list1.append(8)
print(f"ID of list1 after modification: {id(list1)}")
# 修改列表不會改變它的id,因?yàn)榱斜韺ο笤趦?nèi)存中的位置沒有改變
# 只是列表的內(nèi)容發(fā)生了變化
# ID of list1 before modification: 2302696935872
# ID of list1 after modification: 2302696935872

# 應(yīng)用2:檢查對象是否相同
# 檢查兩個整數(shù)是否指向相同的對象
a = 123
b = 123
# 使用id()函數(shù)檢查它們的身份是否相同
if id(a) == id(b):
    print("a 和 b 指向相同的對象")
else:
    print("a 和 b 指向不同的對象")
# 對于小的整數(shù),Python通常會緩存它們,所以a和b可能指向相同的對象
# 但是,這并非總是如此,所以這種方法并不完全可靠來檢查整數(shù)值是否相等
# a 和 b 指向相同的對象

# 檢查兩個列表是否指向相同的對象
list1 = [1, 2, 3]
list2 = list1  # list2是list1的引用,它們指向同一個對象
list3 = [1, 2, 3]  # list3是一個新的列表對象,與list1內(nèi)容相同但身份不同
# 使用id()函數(shù)檢查它們的身份
if id(list1) == id(list2):
    print("list1 和 list2 指向相同的對象")
else:
    print("list1 和 list2 指向不同的對象")
if id(list1) == id(list3):
    print("list1 和 list3 指向相同的對象")
else:
    print("list1 和 list3 指向不同的對象")
# 在這個例子中,list1和list2指向同一個對象,而list1和list3指向不同的對象,盡管它們的內(nèi)容相同
# list1 和 list2 指向相同的對象
# list1 和 list3 指向不同的對象

# 使用is運(yùn)算符檢查對象身份
if list1 is list2:
    print("list1 is list2(它們指向相同的對象)")
else:
    print("list1 is not list2")
if list1 is list3:
    print("list1 is list3(它們指向相同的對象)")
else:
    print("list1 is not list3")
    # is運(yùn)算符是檢查對象身份更直接、更常見的方法
# list1 is list2(它們指向相同的對象)
# list1 is not list3

# 應(yīng)用3:單例模式實(shí)現(xiàn)
class Singleton:
    _instance = None
    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = super(Singleton, cls).__new__(cls)
        return cls._instance
    def __init__(self, value):
        self.value = value
# 創(chuàng)建第一個實(shí)例
singleton1 = Singleton(42)
print(f"ID of singleton1: {id(singleton1)}")
# 嘗試創(chuàng)建第二個實(shí)例
singleton2 = Singleton(24)
print(f"ID of singleton2: {id(singleton2)}")
# 檢查兩個實(shí)例是否相同
if singleton1 is singleton2:
    print("singleton1 and singleton2 are the same instance")
else:
    print("singleton1 and singleton2 are different instances")
# 使用id()函數(shù)進(jìn)一步驗(yàn)證
if id(singleton1) == id(singleton2):
    print("ID of singleton1 and singleton2 are the same")
else:
    print("ID of singleton1 and singleton2 are different")
# ID of singleton1: 2438427103696
# ID of singleton2: 2438427103696
# singleton1 and singleton2 are the same instance
# ID of singleton1 and singleton2 are the same

# 應(yīng)用4:緩存和重用對象
class ObjectCache:
    def __init__(self):
        self.cache = {}
    def get_or_create(self, key, creator_function, *args, **kwargs):
        """
        根據(jù)key獲取對象,如果不存在則使用creator_function創(chuàng)建并緩存。
        """
        if key not in self.cache:
            # 調(diào)用creator_function創(chuàng)建新對象,并傳入額外的參數(shù)
            new_object = creator_function(*args, **kwargs)
            # 將新對象添加到緩存中
            self.cache[key] = new_object
            # 返回緩存中的對象
        return self.cache[key]
# 示例:創(chuàng)建一個緩存對象
cache = ObjectCache()
# 假設(shè)我們有一個創(chuàng)建對象的函數(shù)
def create_expensive_object(id):
    print(f"Creating object with ID: {id}")
    # 這里模擬創(chuàng)建一個昂貴的對象(比如從數(shù)據(jù)庫加載或執(zhí)行復(fù)雜計(jì)算)
    return f"Object {id}"
# 嘗試獲取一個ID為1的對象
obj1 = cache.get_or_create('1', create_expensive_object, '1')
print(f"Object with ID 1: {obj1}")
# 再次嘗試獲取ID為1的對象,這次應(yīng)該直接從緩存中獲取
obj2 = cache.get_or_create('1', create_expensive_object, '1')
print(f"Object with ID 1 (cached): {obj2}")
# 檢查兩個對象是否相同(實(shí)際上是緩存中的同一個對象)
print(f"obj1 is obj2: {obj1 is obj2}")
# 嘗試獲取一個ID為2的新對象
obj3 = cache.get_or_create('2', create_expensive_object, '2')
print(f"Object with ID 2: {obj3}")
# Creating object with ID: 1
# Object with ID 1: Object 1
# Object with ID 1 (cached): Object 1
# obj1 is obj2: True
# Creating object with ID: 2
# Object with ID 2: Object 2
1-2、VBA:
略,待后補(bǔ)。
2、推薦閱讀:

1、Python-VBA函數(shù)之旅-hex()函數(shù)

Python算法之旅:Algorithm

Python函數(shù)之旅:Functions?文章來源地址http://www.zghlxwxcb.cn/news/detail-858483.html

個人主頁:神奇夜光杯-CSDN博客?

到了這里,關(guān)于Python-VBA函數(shù)之旅-id函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python-VBA函數(shù)之旅-all函數(shù)

    Python-VBA函數(shù)之旅-all函數(shù)

    目錄 1、all函數(shù): 1-1、Python: 1-2、VBA: 2、相關(guān)文章: 個人主頁:非風(fēng)V非雨-CSDN博客 ??????? ???????? all函數(shù) 在編程中有多種實(shí)際應(yīng)用場景,特別是在需要確保一個集合中的所有元素都滿足某個條件時。常見的應(yīng)用場景有: 1、驗(yàn)證數(shù)據(jù)的有效性: 當(dāng)需要檢查一

    2024年04月12日
    瀏覽(19)
  • Python-VBA函數(shù)之旅-iter函數(shù)

    Python-VBA函數(shù)之旅-iter函數(shù)

    目錄 一、iter函數(shù)的常見應(yīng)用場景: 二、iter函數(shù)使用注意事項(xiàng): 三、如何用好iter函數(shù)? 1、iter函數(shù): 1-1、Python: 1-2、VBA: 2、推薦閱讀: 個人主頁:神奇夜光杯-CSDN博客? 一、iter函數(shù)的常見應(yīng)用場景: ????????在Python中, iter()函數(shù) 具有廣泛的應(yīng)用場景,主要用于 創(chuàng)建

    2024年04月27日
    瀏覽(26)
  • Python-VBA函數(shù)之旅-exec函數(shù)

    Python-VBA函數(shù)之旅-exec函數(shù)

    目錄 一、exec函數(shù)的常見應(yīng)用場景: 二、exec函數(shù)安全使用注意事項(xiàng): 三、exec函數(shù)與eval函數(shù)對比分析: 1、exec函數(shù): 1-1、Python: 1-2、VBA: 2、相關(guān)文章: 個人主頁:神奇夜光杯-CSDN博客? 一、exec函數(shù)的常見應(yīng)用場景: ????????exec函數(shù) 在Python中有多種實(shí)際應(yīng)用場景,盡管

    2024年04月25日
    瀏覽(37)
  • Python-VBA函數(shù)之旅-chr函數(shù)

    Python-VBA函數(shù)之旅-chr函數(shù)

    目錄 1、chr函數(shù): 1-1、Python: 1-2、VBA: 2、相關(guān)文章: 個人主頁:非風(fēng)V非雨-CSDN博客 ??????? ???????? chr函數(shù) 在Python編程中有多種應(yīng)用場景,它主要用于 將Unicode碼點(diǎn)轉(zhuǎn)換為對應(yīng)的字符 。常見的應(yīng)用場景有: 1、字符(串)處理: chr函數(shù)可以將Unicode編碼轉(zhuǎn)換為對應(yīng)

    2024年04月15日
    瀏覽(18)
  • Python-VBA編程500例-033(入門級)

    Python-VBA編程500例-033(入門級)

    目錄 1、角色定位: 1-1、Python: 1-2、VBA: 2、相關(guān)文章: Python算法之旅:Myelsa的Python算法之旅(高鐵直達(dá))-CSDN博客 個人主頁:非風(fēng)V非雨-CSDN博客 歡迎志同道合者一起交流學(xué)習(xí),我的QQ:94509325/微信 ????????角色定位 ( Role Positioning )在編程中的實(shí)際應(yīng)用場景主要體現(xiàn)在以下幾

    2024年04月26日
    瀏覽(23)
  • Python-VBA編程500例-029(入門級)

    Python-VBA編程500例-029(入門級)

    目錄 1、連續(xù)字符段索引: 1-1、Python: 1-2、VBA: 2、相關(guān)文章: Python算法之旅:Myelsa的Python算法之旅(高鐵直達(dá))-CSDN博客 個人主頁:非風(fēng)V非雨-CSDN博客 歡迎志同道合者一起交流學(xué)習(xí),我的QQ:94509325/微信 ????????連續(xù)字符段索引 ( Index of Consecutive Character Segments )在實(shí)際應(yīng)用

    2024年04月13日
    瀏覽(15)
  • Python高級編程之旅2:高級函數(shù)

    歡迎來到《Python高級編程之旅》系列的第二篇博客!在上一篇中,我們介紹了面向?qū)ο缶幊痰母拍詈蛢?yōu)勢。今天,我們將繼續(xù)探索Python中的高級編程技術(shù),重點(diǎn)是高級函數(shù)。高級函數(shù)是Python中非常強(qiáng)大和靈活的概念,可以幫助我們編寫更簡潔、可讀性更高的代碼。讓我們一起

    2024年01月19日
    瀏覽(21)
  • Python函數(shù)每日一講 - id()

    幾天不見,今天我們來看看一個比較特別的函數(shù) id() ,這個函數(shù)就是用來獲取對象在內(nèi)存中的唯一標(biāo)識符的函數(shù)。 id() 函數(shù)是Python內(nèi)置函數(shù)之一,用于獲取對象在內(nèi)存中的唯一標(biāo)識符。其語法格式如下: 其中,object參數(shù)是要獲取標(biāo)識符的對象。 例1: 獲取整數(shù)對象的標(biāo)識符 例

    2024年03月12日
    瀏覽(22)
  • 編程江湖:Python探秘之旅-----函數(shù)的魔法(三)

    項(xiàng)目進(jìn)行到關(guān)鍵階段,“云悟”,項(xiàng)目經(jīng)理,強(qiáng)調(diào)了代碼的模塊化和重用性的重要性。她希望團(tuán)隊(duì)能夠提高工作效率,避免重復(fù)勞動。 云悟 :(審視著代碼)我們需要使這些代碼更加模塊化。這樣,我們就可以在不同的項(xiàng)目中重用這些功能,而不是每次都從頭開始。 龍 :(

    2024年01月25日
    瀏覽(29)
  • 【python VS vba】(3) 在python直接調(diào)用vba腳本

    【python VS vba】(3) 在python直接調(diào)用vba腳本

    目錄 0 前言 1 VBA 內(nèi)容 1.1? EXCEL這邊VBA的內(nèi)容 1.2 VBA的測試代碼 2 python 調(diào)用 2.1 python 調(diào)用VBA的過程和結(jié)果 2.2 代碼 前面寫了這么多,沒想到,其實(shí)py是可以直接支持VBA的 python的模塊import xlwings,可以讓python直接調(diào)用EXCEL工作簿文件里的VBA腳本 具體步驟如下 試驗(yàn)環(huán)境:C:UsersAd

    2024年02月06日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包