最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python基礎(chǔ)知識(shí)之變量的詳解

 更新時(shí)間:2021年04月14日 16:04:11   作者:妝巖  
這篇文章主要介紹了Python基礎(chǔ)知識(shí)之變量的詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好的幫助,需要的朋友可以參考下

一.定義

在python中,變量名只有在第一次出現(xiàn)的時(shí)候,才是定義變量。當(dāng)再次出現(xiàn)時(shí),不是定義變量,而是直接調(diào)用之前定義的變量。

二.命名方法

2.1小駝峰命名法

第一個(gè)單詞以小寫字母開始,后續(xù)單詞的首字母大寫

firstName , lastName

2.2大駝峰命名法

每一個(gè)單詞的首字母都采用大寫字母
FirstName , LastName

2.3下劃線命名法

每個(gè)單詞之間用下劃線連接起來
first_name , last_name

三.命名規(guī)則

3.1標(biāo)識(shí)符

開發(fā)人員自定義的一些符號(hào)和名稱
如:變量名、函數(shù)名、類名

標(biāo)識(shí)符命名規(guī)則
1.只能由數(shù)字、字母、下劃線組成,且不能以數(shù)字開頭
2.不能和python中的關(guān)鍵字重名
3.盡量做到見名知義
4.不能使用單字符(i,o)作為變量名,因?yàn)樘?和1了
5.函數(shù)首字母小寫,類的首字母大寫

3.2關(guān)鍵字

1.關(guān)鍵字就是在python內(nèi)部已經(jīng)使用的標(biāo)識(shí)符
2.關(guān)鍵字具有特殊的功能和含義
3.開發(fā)者不允許定義和關(guān)鍵字相同的名字的標(biāo)識(shí)符

注意:

1.命名規(guī)則可以被視為一種慣例,無絕對(duì)與強(qiáng)制,目的是為了增加代碼的識(shí)別和可讀性
2.python中的標(biāo)識(shí)符是區(qū)分大小寫的
3.在定義變量時(shí),為了保證代碼格式,遵循PEP8規(guī)范,等號(hào)(=)的左右兩邊該各保留一個(gè)空格

四.使用方法

4.1單變量賦值:

變量名 = 值
例:a = 1
在python中賦值語句總是建立對(duì)象的引用值,而不是復(fù)制對(duì)象。因此,python中的變量存儲(chǔ)的是引用數(shù)據(jù)的內(nèi)存地址,而不是數(shù)據(jù)存儲(chǔ)區(qū)域。


在這里插入圖片描述

當(dāng)涉及多個(gè)變量時(shí):

a = 1
b = a
c = b
print(a) # 1
print(id(a)) # 140710098927888
print(b) # 1
print(id(b)) # 140710098927888
print(c) # 1
print(id(c)) # 140710098927888

a、b、c三個(gè)變量的值都等于1,即使在最初定義變量的時(shí)候b和c不是直接等于1的,但是他們?nèi)匀淮鎯?chǔ)著指向“1”的內(nèi)存地址。

4.2底層邏輯:

在這里插入圖片描述

4.3總結(jié):

可以說Python中沒有賦值,只有引用。Python 沒有“變量”,我們平時(shí)所說的變量其實(shí)只是“標(biāo)簽”,是引用。

當(dāng)創(chuàng)建了無數(shù)個(gè)變量=1時(shí),在內(nèi)存中,只會(huì)開辟無數(shù)個(gè)空間存儲(chǔ)變量,再開辟一個(gè)空間存儲(chǔ)“1”,而這些變量中存儲(chǔ)的內(nèi)存地址都相同,全都指向“1”的內(nèi)存地址。

在代碼層面,看起來像是給變量賦值,但是在底層卻是變量指向值,也就是變量引用了值。

相信大家還有疑問,那么請(qǐng)繼續(xù)閱讀

5.變量進(jìn)階

先提出一個(gè)問題:

a = [0, 1, 2]
a[1] = a
print(a)

猜想結(jié)果是:

[0, [0, 1, 2], 2]

但是真正的結(jié)果是:

[0, [...], 2]

為什么結(jié)果會(huì)賦值了無限次??

結(jié)合剛才得出的結(jié)論:Python中沒有賦值,只有引用。

真相是:
這樣相當(dāng)于創(chuàng)建了一個(gè)引用自身的結(jié)構(gòu),所以導(dǎo)致了無限循環(huán)。

通過遞歸函數(shù)可能更好理解:

a = [0,1,2]
a[1] = a

def fun1(n1):
    for i in n1:
        if type(i) == list:
            return fun1(n1)
        else:
            print(i)

print(fun1(a[1]))

結(jié)果:

在這里插入圖片描述

果然是:調(diào)用Python對(duì)象時(shí)超出最大遞歸深度。

底層邏輯:a[1] = a 造成了遞歸引用

在這里插入圖片描述

當(dāng)調(diào)用變量a時(shí),就是調(diào)用[0,1,2],此時(shí) [0,1,2] 的結(jié)構(gòu)變成了 [0,?,2] ,而 ? 又指向 [0,?,2] 本身,以此類推,造成了遞歸調(diào)用的情況。
所以在遍歷a并輸出的時(shí)候會(huì)引起超出最大遞歸深度的錯(cuò)誤。

想得到 [0, [0, 1, 2], 2] 的結(jié)果并不難:

a = [0,1,2]
a[1] = a[:]
print(a) # [0, [0, 1, 2], 2]

a[:] = a[0:尾部索引值:1]
生成對(duì)象的淺拷貝或者是復(fù)制序列,不再是引用和共享變量,但此法只能頂層復(fù)制

6. a = a + 1 和 a += 1 的區(qū)別

既然談到了賦值和引用的區(qū)別,那就捎帶談一下a = a + 1 和 a += 1 的區(qū)別:
直接上代碼:

a = [1, 2]
b = a
print(id(a)) # 1878561149448
print(id(b)) # 1878561149448
a = a + [1, 2]
print(a, b) # [1, 2, 1, 2] [1, 2]
print(id(a)) # 1878593529288
print(id(b)) # 1878561149448
print ("-------------------")
a = [1, 2]
b = a
print(id(a)) # 1878561149960
print(id(b)) # 1878561149960
a += [1, 2]
print(a, b) # [1, 2, 1, 2] [1, 2, 1, 2]
print(id(a)) # 1878561149960
print(id(b)) # 1878561149960

通過對(duì)比發(fā)現(xiàn)問題:變量a通過“=” 和 “+=”運(yùn)算,得到的變量b竟然是不同的,運(yùn)算后變量a的id竟然也是不同的。
執(zhí)行a = a + [1, 2] 后:
變量b指向的值并未發(fā)生改變,而變量a的id發(fā)生了變化,值也發(fā)生了變化
執(zhí)行a += [1, 2] 后:
變量a和b的值都發(fā)生了改變,而二者的id卻沒有改變

具體原因,看圖說話:
執(zhí)行a = a + [1, 2] 后,會(huì)生成一個(gè)新對(duì)象,并在cpu上開辟一塊空間存儲(chǔ) a + [1, 2] ,然后由a指向它。所以變量a的id發(fā)生了變化,值也發(fā)生了變化。此時(shí)變量b指向的值并未發(fā)生改變。


在這里插入圖片描述

執(zhí)行a += [1, 2] 后:并不會(huì)生成新對(duì)象,只是把a(bǔ)原本指向內(nèi)存地址的對(duì)象的值改變成了 a + [1, 2],所以變量a和b的值都發(fā)生了改變,而二者的id卻沒有改變。


在這里插入圖片描述

對(duì)于可變對(duì)象類型和不可變對(duì)象類型有不同的結(jié)果:

可變對(duì)象類型:+=改變了原本地址上對(duì)象的值,不改變?cè)镜闹赶虻刂罚?則改變了原本的指向地址,創(chuàng)建了新的對(duì)象,并指向新的地址

不可改變對(duì)象類型:都是改變?cè)镜闹赶虻刂?,指向新?chuàng)建的對(duì)象地址

a = 'abc'
b = a
print(id(a)) # 1629835782384
print(id(b)) # 1629835782384
a = a + 'd'
print(a, b) # abcd abc
print(id(a)) # 1629835853168
print(id(b)) # 1629835782384
print ("-------------------")
a = 'abc'
b = a
print(id(a)) # 1629835782384
print(id(b)) # 1629835782384
a += 'd'
print(a, b) # abcd abc
print(id(a)) # 1629835782384
print(id(b)) # 1629835782384

到此這篇關(guān)于Python基礎(chǔ)知識(shí)之變量的詳解的文章就介紹到這了,更多相關(guān)python變量詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在DigitalOcean的服務(wù)器上部署flaskblog應(yīng)用

    在DigitalOcean的服務(wù)器上部署flaskblog應(yīng)用

    這篇文章主要介紹了在DigitalOcean的服務(wù)器上部署flaskblog的方法,flaskblog是用Python的Flask開發(fā)的一個(gè)博客程序,而DigitalOcean則是大受歡迎的SSD主機(jī)提供商,需要的朋友可以參考下
    2015-12-12
  • Python中自定義函方法與參數(shù)具有默認(rèn)值的函數(shù)

    Python中自定義函方法與參數(shù)具有默認(rèn)值的函數(shù)

    這篇文章主要介紹了Python中自定義函方法與參數(shù)具有默認(rèn)值的函數(shù),在Python編程中,可以使用已經(jīng)定義好的函數(shù),也可以自定義函數(shù)實(shí)現(xiàn)某些特殊的功能,更多相關(guān)資料,請(qǐng)需要的人參考下面文章內(nèi)容
    2022-02-02
  • 基于Python實(shí)現(xiàn)視頻的人臉融合功能

    基于Python實(shí)現(xiàn)視頻的人臉融合功能

    這篇文章主要介紹了用Python快速實(shí)現(xiàn)視頻的人臉融合功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • python cs架構(gòu)實(shí)現(xiàn)簡(jiǎn)單文件傳輸

    python cs架構(gòu)實(shí)現(xiàn)簡(jiǎn)單文件傳輸

    這篇文章主要為大家詳細(xì)介紹了python cs架構(gòu)實(shí)現(xiàn)簡(jiǎn)單文件傳輸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 教你怎么用python實(shí)現(xiàn)字符串轉(zhuǎn)日期

    教你怎么用python實(shí)現(xiàn)字符串轉(zhuǎn)日期

    今天教各位小伙伴怎么用python實(shí)現(xiàn)字符串轉(zhuǎn)日期,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴很有幫助,需要的朋友可以參考下
    2021-05-05
  • Python 實(shí)現(xiàn)使用dict 創(chuàng)建二維數(shù)據(jù)、DataFrame

    Python 實(shí)現(xiàn)使用dict 創(chuàng)建二維數(shù)據(jù)、DataFrame

    下面小編就為大家分享一篇Python 實(shí)現(xiàn)使用dict 創(chuàng)建二維數(shù)據(jù)、DataFrame,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 如何在Python中引用其他模塊

    如何在Python中引用其他模塊

    這篇文章主要介紹了如何在Python中引用其他模塊,在Python中,除了可以自定義模塊外,還可以引用其他模塊,主要包括使用標(biāo)準(zhǔn)庫(kù)和第三方模塊,下面文章分別詳細(xì)的介紹,需要的小伙伴可以參考一下
    2022-06-06
  • pandas的分箱操作實(shí)現(xiàn)

    pandas的分箱操作實(shí)現(xiàn)

    本文主要介紹了在pandas中使用pd.cut()和pd.qcut()方法進(jìn)行數(shù)據(jù)分箱的操作,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • Python函數(shù)關(guān)鍵字參數(shù)及用法詳解

    Python函數(shù)關(guān)鍵字參數(shù)及用法詳解

    本文主要介紹了Python函數(shù)關(guān)鍵字參數(shù)及用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 一文教你利用Python租到最合適的房子

    一文教你利用Python租到最合適的房子

    這篇文章主要為大家詳細(xì)介紹了如何利用Python語言在爬取到房源數(shù)據(jù)后,挑選出符合自己要求的房子呢?感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-09-09

最新評(píng)論

和平区| 定兴县| 沐川县| 大丰市| 土默特左旗| 泰宁县| 凤庆县| 博湖县| 浠水县| 和平县| 蓬溪县| 凤冈县| 太仓市| 吐鲁番市| 厦门市| 松溪县| 红原县| 稻城县| 双流县| 虹口区| 兴海县| 浦县| 铜陵市| 铅山县| 靖远县| 东丽区| 黔江区| 锡林郭勒盟| 武安市| 汶上县| 报价| 沾化县| 大庆市| 红安县| 噶尔县| 巩义市| 芷江| 卫辉市| 祁东县| 荣昌县| 南岸区|