0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

python的深入使用

汽車電子技術(shù) ? 來源:程序猿知秋 ? 作者: 程序猿知秋 ? 2023-02-16 15:49 ? 次閱讀

深拷貝和淺拷貝

可變類型與不可變類型

  • 可變對象是指,一個對象在不改變其引用的前提下,可以修改其所指向的地址中的值
  • 不可變對象是指,一個對象引用指向的值是不能修改的

淺拷貝

  • 淺拷貝是對于一個對象的頂層拷貝;
  • 簡單理解就是,拷貝了引用,并沒有拷貝內(nèi)容
  • 這也就意味著,只要修改其中一個引用的內(nèi)容,其它引用的地方也都會改變

深拷貝

  • 會拷貝引用指定的值,放入新生成的內(nèi)存空間中
  • 引用也會重新生成

**示例

**

import copy


# 淺拷貝
a=[1,3]
b=a
a.append(4)


# 引用地址一樣,操作其中一個引用添加數(shù)據(jù),另一個也會變
print("淺拷貝..............")
print(id(a))
print(id(b))
print(a)
print(b)


# 深拷貝
c=[1,3]
d=copy.deepcopy(c)
c.append(4)


# 引用不一樣了,利用其中一個修改了值,另一個不會改變
print("深拷貝..............")
print(id(c))
print(id(d))
print(c)
print(d)

**輸出結(jié)果

**

圖片

總結(jié):不管是淺拷貝還是深拷貝都會生成一個看起來相同的對象,他們本質(zhì)的區(qū)別是拷貝出來的對象的地址是否和原對象一樣, 也就是地址的復制還是值的復制的區(qū)別

**私有化、import、面向?qū)ο?**

方法私有化

  • xx:公有變量
  • _x: 單前置下劃線,私有化屬性或方法,類對象和子類可以訪問,但禁止導入
  • __xx:雙前置下劃線,避免與子類中的屬性命名沖突,無法在外部直接訪問
  • xx :雙前后下劃線,用戶名字空間的魔法對象或?qū)傩?。例如?strong>init
  • xx_:單后置下劃線,用于避免與Python關(guān)鍵詞沖突

示例

class Test:
    # 初始化方法
    def __init__(self,name,age,sex):
        # 公有變量
        self.name=name
        # 私有化屬性
        self._age=age
        # 外部無法直接訪問
        self.__sex=sex


    def show(self):
        print(self.name)
        print(self._age)
        print(self.__sex)


test=Test("as",12,"男")
test.show()

import 導入模塊

  • import 搜索路徑
    • 從下面列出的目錄里面依次查找要導入的模塊文件
    • '' 表示當前路徑
    • 列表中路徑的先后順序代表了 python 解釋器在搜索模塊時的先后順序

圖片

  • 程序添加路徑
    • sys.path.append() 在末尾添加路徑
    • sys.path.insert() 在指定位置插入路徑

圖片

類方法類型

方法包括:實例方法、靜態(tài)方法和類方法,三種方法在內(nèi)存中都歸屬于類,區(qū)別在于調(diào)用方式不同

  • 實例方法:由對象調(diào)用,至少有一個self參數(shù),執(zhí)行實例方法時,自動將調(diào)用該方法的對象賦值給self
  • 類方法:由類調(diào)用,至少一個cls參數(shù),執(zhí)行類方法時,自動將調(diào)用該方法的類賦值給cls
  • 靜態(tài)方法:由類直接調(diào)用,可以沒有任何參數(shù)
  • property方法: 一種與實例方法相似的特殊方法,使用方法如下
    • 定義時,在實例方法上加 @property 注解,并只有 self一個參數(shù)
    • 調(diào)用時,無需括號
    • property 有三種訪問方式,分別對應三個被 @property、@方法名.setter、@方法名.deleter 修飾的方法

示例

class Test:


    age =12


    def __init__(self,name):
        self.name=name


    def instance_method(self):
        """實例方法,至少有一個self參數(shù)"""
        print("這是實例方法,name值是:",self.name)


    @classmethod
    def class_method(cls,age):
        """類方法,至少有一個cls參數(shù)"""
        cls.age=age
        print("這是類方法,age值是:",cls.age)


    @staticmethod
    def static_method():
        """這是靜態(tài)方法,可以沒有任何參數(shù)"""
        print("這是靜態(tài)方法")


    @property
    def count(self):
        """這是property特殊屬性"""
        return 11
    @count.setter
    def count(self,value):
        print("property設置值為:",value)
    @count.deleter
    def count(self):
        print("property刪除")


test=Test("張三")
#調(diào)用實例方法
test.instance_method()


#調(diào)用類方法
Test.class_method(22)


# 調(diào)用靜態(tài)方法
Test.static_method()


# 調(diào)用property方法
aa=test.count
print(aa)
test.count=44
del test.count

輸出結(jié)果

圖片

property的第二種用法

class Test2:


    def get_count(self):
        return 22


    def set_count(self,value):
        print("設置值:",value)


    def del_count(self):
        print("刪除值")


    # property 方法有四個參數(shù)
    # 第一個參數(shù)是方法名,調(diào)用對象.屬性 時執(zhí)行方法
    # 第二個參數(shù)是方法名, 調(diào)用對象.屬性 = XXX 時,執(zhí)行方法
    # 第三個參數(shù)是方法名,調(diào)用 del 對象.屬性 時,執(zhí)行方法
    # 第四個參數(shù)是字符串,調(diào)用 對象.屬性.__doc__ ,此參數(shù)是該屬性的描述信息
    cc=property(get_count,set_count,del_count,"ssssssss")


test2=Test2()
c=test2.cc
print(c)
test2.cc=444
del test2.cc
doc=test2.cc.__doc__
print(doc)

輸出結(jié)果

圖片

魔法屬性

doc 表示類的描述信息

class Tee:
    """ 描述類的信息 ,xxxxxxxxxxxxxxxxxxxxxx"""
    def __init__(self):
        pass


print(Tee.__doc__)

輸出結(jié)果

圖片

moduleclass

  • module 表示當前操作的對象在哪個模塊
  • class 表示當前操作的對象類是什么
class Dog:
    def __init__(self,name):
        self.name=name


dog=Dog("小白")
print(dog.__module__)
print(dog.__class__)

輸出結(jié)果

圖片

init

  • 初始化方法:通過類創(chuàng)建對象時,自動觸發(fā)執(zhí)行
class Dog:
    def __init__(self,name):
        self.name=name


dog=Dog("小白")

del

  • 當對象在內(nèi)存中被釋放時,自動觸發(fā)執(zhí)行
  • 此方法一般不用定義,程序員在使用時無需關(guān)心內(nèi)存的分配和釋放,Python解釋器會自動執(zhí)行,所以 del 的調(diào)用是由解釋器在進行垃圾回收時自動觸發(fā)執(zhí)行
class Dog:
    def __del__(self):
        pass

with與“上下文管理器”

# 普通版,此部分有一個潛在問題,即如果在write時發(fā)生異常,則close不會被調(diào)用,資源將得不到釋放
def t1():
    f=open("aa.txt","w")
    f.write("hello world!")
    f.close()

# 升級版本, 此處可以保證發(fā)生異常時,資源能得到釋放. 但是代碼寫得比較復雜
def t2():
    f = open("aa.txt", "w")
    try:
        f.write("hello world!")
    except Exception as e:
        print("發(fā)生錯誤!!")
    finally:
        f.close()


# 高級版,此處使用 with的作用和使用 try/finally 語句是一樣的,并且寫法更簡潔
def t3():
    with open("aa.txt", "w") as f:
        f.write("hello world!")

什么是上下文

  • 上下文在不同的地方表示不同的含義,與文章的上下文含義一樣。

上下文管理器

  • 任何實現(xiàn)了 enterexit 方法的對象都可以稱為上下文管理器,上下文管理器可以使用 with 關(guān)鍵字。文件(file) 對象也實現(xiàn)了上下文管理器

示例

# 自定義一個文件類,作為上下文管理器
class MyFile:
    def __init__(self,filename,mode):
        self.filename=filename
        self.mode=mode


    # 返回資源對象
    def __enter__(self):
        self.f=open(self.filename,self.mode)
        return self.f


    # 處理一些清除工作
    def __exit__(self, exc_type, exc_val, exc_tb):
        self.f.close()




with MyFile("aa.txt","w") as f:
    f.write("sssssss")
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 對象
    +關(guān)注

    關(guān)注

    1

    文章

    38

    瀏覽量

    17391
  • 地址
    +關(guān)注

    關(guān)注

    1

    文章

    32

    瀏覽量

    10766
  • 引用
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    7733
收藏 人收藏

    評論

    相關(guān)推薦

    為何Python運行效率低?python語言入門

    卡,影響運行效率。以上是影響Python運行效率的五大原因,那么該如何進行優(yōu)化呢?這個就需要您進行下一步的深入了解啦!
    發(fā)表于 02-01 18:47

    Python編程語言可以應用在哪些方面?

    領(lǐng)域,Python幾乎是霸主地位,將網(wǎng)絡一切數(shù)據(jù)作為資源,通過自動化程序進行有針對性的數(shù)據(jù)采集以及處理。從事該領(lǐng)域應學習爬蟲策略、高性能異步IO、分布式爬蟲等,并針對Scrapy框架源碼進行深入剖析
    發(fā)表于 02-05 17:50

    python有哪些方向?

    Python學習的另一方向,網(wǎng)絡編程在生活和開發(fā)中無處不在,哪里有通訊就有網(wǎng)絡,它可以稱為是一切開發(fā)的“基石”。對于所有編程開發(fā)人員必須要知其然并知其所以然,所以網(wǎng)絡部分將從協(xié)議、封包、解包等底層進行深入剖析
    發(fā)表于 03-09 15:47

    Python十大應用領(lǐng)域和就業(yè)方向

    領(lǐng)域,Python幾乎是霸主地位,將網(wǎng)絡一切數(shù)據(jù)作為資源,通過自動化程序進行有針對性的數(shù)據(jù)采集以及處理。從事該領(lǐng)域應學習爬蟲策略、高性能異步IO、分布式爬蟲等,并針對Scrapy框架源碼進行深入剖析
    發(fā)表于 11-21 14:54

    Python解釋器的基本結(jié)構(gòu)

    供足夠的上下文來進一步研究它。我們的目標并不是解釋所有關(guān)于解釋器的知識——就像編程和計算機科學中許多有趣的領(lǐng)域一樣,您可以花費數(shù)年時間來深入理解這個主題。Byterun它的結(jié)構(gòu)類似于Python的主要實...
    發(fā)表于 09-16 06:42

    Python編程實用指南

    Python 是一種解釋型、面向?qū)ο?、動態(tài)數(shù)據(jù)類型的高級程序設計語言。通過 Python 編程,我們能夠解決現(xiàn)實生活中的很多任務。本書是一本面向?qū)嵺`的 Python 編程實用指南。本書的目的,不僅是
    發(fā)表于 09-27 06:21

    深入Python3中文版PDF電子書免費下載

    如果使用的是托管服務器上的帳號, ISP[互聯(lián)網(wǎng)供應商] 可能已經(jīng)安裝了 Python 3 。如果是在家運行的 Linux ,也可能已經(jīng)安裝了 Python 3 。多數(shù)流行的 GNU/Linux
    發(fā)表于 06-10 08:00 ?0次下載

    python的優(yōu)缺點有哪些

    Python的定位是“優(yōu)雅”、“明確”、“簡單”,所以Python程序看上去總是簡單易懂,初學者學Python,不但入門容易,而且將來深入下去,可以勝任那些非常非常復雜的應用程序開發(fā)。
    的頭像 發(fā)表于 01-16 09:20 ?3504次閱讀

    精通Python深入學習資料

    精通Python深入學習資料:從多方面來了解Python的特性和用法。
    發(fā)表于 07-07 15:08 ?41次下載
    精通<b class='flag-5'>Python</b>的<b class='flag-5'>深入</b>學習資料

    深入了解python常量與變量

      Python 的變量和常量不需要事先聲明類型,這是根據(jù)Python的動態(tài)語言特性而來。
    的頭像 發(fā)表于 02-16 18:22 ?1928次閱讀
    <b class='flag-5'>深入</b>了解<b class='flag-5'>python</b>常量與變量

    深入Python3》中文版pdf

    深入Python3》中文版pdf
    發(fā)表于 02-28 09:45 ?0次下載

    深入探討Python 的簡要歷史和優(yōu)點

    Scarlett 指出,作為一種通用語言,Python 可以用于各種應用程序,“簡單易用” 的特點也使得它成為用于自動化任務、構(gòu)建網(wǎng)站或軟件和分析數(shù)據(jù)的不錯的選擇。
    發(fā)表于 03-15 11:38 ?301次閱讀

    python寫完程序之后怎么運行

    Python程序的執(zhí)行流程有更深入的了解。 一、Python程序的基本結(jié)構(gòu) Python程序是由一系列的語句構(gòu)成,語句是指一行代碼或多行代碼組成的指令集合。一個
    的頭像 發(fā)表于 11-22 11:10 ?1010次閱讀

    使用Python進行自然語言處理

    在探討使用Python進行自然語言處理(NLP)的廣闊領(lǐng)域時,我們首先需要理解NLP的基本概念、其重要性、Python在NLP中的優(yōu)勢,以及如何通過Python實現(xiàn)一些基礎的NLP任務。本文將從這些方面展開,并
    的頭像 發(fā)表于 07-04 14:40 ?456次閱讀

    Python在AI中的應用實例

    Python在人工智能(AI)領(lǐng)域的應用極為廣泛且深入,從基礎的數(shù)據(jù)處理、模型訓練到高級的應用部署,Python都扮演著至關(guān)重要的角色。以下將詳細探討Python在AI中的幾個關(guān)鍵應用
    的頭像 發(fā)表于 07-19 17:16 ?1098次閱讀