本篇文章給大家分享的是有關(guān)如何分析Python自動(dòng)化運(yùn)維開(kāi)發(fā)中的變量,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、廣南ssl等。為近1000家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的廣南網(wǎng)站制作公司
好程序員分享Python自動(dòng)化運(yùn)維開(kāi)發(fā)實(shí)戰(zhàn)四-變量
導(dǎo)語(yǔ):1.什么是變量2.變量名稱的命名3.變量賦值4.變量存儲(chǔ)數(shù)據(jù)的方式5.引用計(jì)數(shù)
什么是變量:
python學(xué)習(xí)過(guò)程中會(huì)用到許多數(shù)據(jù),那為了方便操作,需要把這些數(shù)據(jù)分別用一個(gè)簡(jiǎn)單的名字代表,方便在接下來(lái)的程序中引用。
變量就是代表某個(gè)數(shù)據(jù)(值)的名稱。簡(jiǎn)單點(diǎn)說(shuō)變量就是給數(shù)據(jù)起個(gè)名字
變量名稱的命名:
由字母數(shù)字下劃線組成的,且不能以數(shù)字開(kāi)頭,不能使用關(guān)鍵字,區(qū)分大小寫。
命名慣例:
1. 以單一下劃線開(kāi)頭的變量名(_X)不會(huì)被 from module import *語(yǔ)句導(dǎo)入2. 前后有下劃線的變量名(_X_)是系統(tǒng)定義的變量名,對(duì)解釋器有特殊意義3. 以雙下劃線開(kāi)頭,但結(jié)尾沒(méi)有雙下劃線的變量名(__X)是類的本地變量4. 通過(guò)交互模式運(yùn)行時(shí),只有單個(gè)下劃線的變量名(_)會(huì)保存最后表達(dá)式的結(jié)果
python命名規(guī)范總結(jié):
模塊名:小寫字母,單詞之間用_分割,比如ad_stats.py包名:和模塊名一樣類名:?jiǎn)卧~首字母大寫,比如AdStats ConfigUtil全局變量名:大寫字母,單詞之間用_分割,比如UMBER COLOR_WRITE普通變量:小寫字母,單詞之間用_分割,比如this_is_a_var實(shí)例變量:以_開(kāi)頭,其他和普通變量一樣,比如_price _instance_var私有實(shí)例變量(外部訪問(wèn)會(huì)報(bào)錯(cuò)):以__開(kāi)頭(2個(gè)下劃線),其他和普通變量一樣 __private_var專有變量: __開(kāi)頭,__結(jié)尾,一般為python的自有變量,不要以這種方式命名 __doc__ __class_
變量賦值:
是變量聲明和定義的過(guò)程
單個(gè)變量賦值:
#!/usr/bin/python# -*- coding: UTF-8 -*-counter = 100 # 賦值整型變量miles = 1000.0 # 浮點(diǎn)型name = "John" # 字符串print counterprint milesprint name
多個(gè)變量賦值:
Python允許你同時(shí)為多個(gè)變量賦值。例如:a = b = c = 1以上實(shí)例,創(chuàng)建一個(gè)整型對(duì)象,值為1,三個(gè)變量被分配到相同的內(nèi)存空間上。同時(shí)為多個(gè)變量賦不同的值。例如:a, b, c = 1, 2, "john"以上實(shí)例,兩個(gè)整型對(duì)象1和2的分配給變量a和b,字符串對(duì)象"john"分配給變量c。
變量存儲(chǔ)數(shù)據(jù)的方式:
一般編程語(yǔ)言變量存儲(chǔ)數(shù)據(jù)的方式:
變量是計(jì)算機(jī)內(nèi)存中的一塊區(qū)域,變量可以存儲(chǔ)規(guī)定范圍內(nèi)的值,而且值是可變的。在創(chuàng)建變量時(shí)會(huì)在內(nèi)存中開(kāi)辟一個(gè)空間?;谧兞康臄?shù)據(jù)類型,解釋器會(huì)分配指定內(nèi)存,并決定什么數(shù)據(jù)可以被存儲(chǔ)在內(nèi)存中。因此,變量可以指定不同的數(shù)據(jù)類型,這些變量可以存儲(chǔ)整數(shù),小數(shù)或字符。 比如c語(yǔ)言在聲明一個(gè)變量a之后,會(huì)在內(nèi)存中開(kāi)辟出一塊兒對(duì)應(yīng)的空間,在此空間中可以存儲(chǔ)不同的值,也就是給變量賦予不同的值
python變量在內(nèi)存中存儲(chǔ)值得方式和其他編程語(yǔ)言不同:
在Python中,變量名沒(méi)有類型,但對(duì)象有 變量名只是對(duì)對(duì)象的引用(內(nèi)部實(shí)現(xiàn)為指針) python中是以數(shù)據(jù)為主,變量a只是相當(dāng)于一個(gè)內(nèi)存空間的標(biāo)簽,a=1開(kāi)辟一塊空間存儲(chǔ)1,之后重新復(fù)制a=2是重新開(kāi)辟出新的空間存儲(chǔ)2,變量名稱a換了個(gè)位置指向新空間中的2同樣的地址空間可以有兩個(gè)或多個(gè)標(biāo)簽,比如a=1,b=1實(shí)際上是a和b指向同一個(gè)地址空間查看變量指向地址空間的地址:使用id(變量名稱)函數(shù) >>> a=1 >>> id(a) 19882304 >>> b=1 >>> id(b) 19882304 上例發(fā)現(xiàn)同一個(gè)值賦值給不同變量,實(shí)際地址空間未發(fā)生變化,只是標(biāo)簽發(fā)生了變化
PYTHON內(nèi)部的引用計(jì)數(shù)(SYS.GETREFCOUNT):
什么是引用計(jì)數(shù)器:
Python內(nèi)部記錄著所有使用中的對(duì)象有多少引用。一個(gè)內(nèi)部跟蹤變量,稱為一個(gè)引用計(jì)數(shù)器。當(dāng)對(duì)象被創(chuàng)建時(shí),就創(chuàng)建了一個(gè)引用計(jì)數(shù),當(dāng)這個(gè)對(duì)象不再需要時(shí),也就是說(shuō),這個(gè)對(duì)象的引用計(jì)數(shù)變?yōu)?時(shí),它被垃圾回收。(這個(gè)只是形象的說(shuō)一下,并不是嚴(yán)格的100%正確,但是通俗的理解往往是最好的學(xué)習(xí)方式)
增加引用計(jì)數(shù):
當(dāng)對(duì)象被創(chuàng)建并(將其引用)賦值給變量時(shí),該對(duì)象的引用技術(shù)就是被設(shè)置為1。 當(dāng)同一個(gè)對(duì)象的應(yīng)用或者是對(duì)象又被賦值給其他變量時(shí),或者作為參數(shù)傳遞給函數(shù),方法或類實(shí)例時(shí),或者被賦值為一個(gè)窗口對(duì)象的成員時(shí),該對(duì)象的一個(gè)新的引用,或者稱作別名,就被創(chuàng)建(則該對(duì)象的引用計(jì)數(shù)自動(dòng)加1)
減少引用計(jì)數(shù):
當(dāng)對(duì)象的引用被銷毀時(shí),引用計(jì)數(shù)會(huì)減少。最明顯的例子就是當(dāng)引用離開(kāi)其作用范圍時(shí),這種情況最經(jīng)常出現(xiàn)在函數(shù)運(yùn)行結(jié)束時(shí),所有局部變量都被自動(dòng)銷毀,對(duì)象的引用計(jì)數(shù)也就隨之減少。
當(dāng)變量被賦值給另外一個(gè)對(duì)象時(shí),源對(duì)象的引用技術(shù)也會(huì)自動(dòng)減1
其他造成對(duì)象的引用計(jì)數(shù)減少的方式包括使用del語(yǔ)句刪除一個(gè)變量,或者當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)在以下情況會(huì)減少:
1. 一個(gè)本地引用離開(kāi)了其作用范圍,比如函數(shù)結(jié)束2. 對(duì)象的別名被顯示的銷毀3. 對(duì)象的一個(gè)別名被賦值給其他的對(duì)象4. 對(duì)象被從一個(gè)窗口對(duì)象中移除5. 窗口對(duì)象本身被銷毀
例子:
>>> import sys>>> a="ab">>> sys.getrefcount("ab")3 第一次結(jié)果為3>>> b="ab">>> sys.getrefcount("ab")4 第二次結(jié)果+1>>> b=0 b引用了其他的對(duì)象(0),對(duì)于"ab"來(lái)講就取消了一個(gè)引用>>> sys.getrefcount("ab")3 結(jié)果在上次引用的基礎(chǔ)上-1
注意:在交互式解釋器中帶空格的對(duì)象引用次數(shù)永遠(yuǎn)為3,但是在腳本中回歸正常,例如: #!/usr/bin/env python # coding=utf8 fdaf import sys print sys.getrefcount("ab cd") a="ab cd" print sys.getrefcount("ab cd") b="ab cd" print sys.getrefcount("ab cd") c=b print sys.getrefcount("ab cd")
垃圾收集:
不再被使用的內(nèi)存會(huì)被一種稱為垃圾收集的機(jī)制釋放。像上面說(shuō)的,雖然解釋器跟蹤對(duì)象的引用計(jì)數(shù),但是垃圾收集器負(fù)責(zé)釋放內(nèi)存。垃圾收集器是一塊獨(dú)立的代碼,它用來(lái)尋找引用計(jì)數(shù)為0的對(duì)象,他也負(fù)責(zé)檢查那些雖然引用計(jì)數(shù)大于0但也該被銷毀的對(duì)象。特定情形會(huì)導(dǎo)致循環(huán)引用。一個(gè)循環(huán)引用發(fā)生在當(dāng)你有至少兩個(gè)對(duì)象互相引用時(shí),也就是所說(shuō)的引用都消失時(shí),這些引用仍然存在,這說(shuō)明只靠引用計(jì)數(shù)是不夠的。Python的垃圾收集器實(shí)際上是一個(gè)引用計(jì)數(shù)器和一個(gè)循環(huán)垃圾收集器。當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)變?yōu)?,解釋器會(huì)暫停,釋放掉這個(gè)對(duì)象和僅有這個(gè)對(duì)象可訪問(wèn)的其他對(duì)象,作為引用計(jì)數(shù)的補(bǔ)充,垃圾收集器也會(huì)留心被分配的總量很大(以及未通過(guò)引用計(jì)數(shù)銷毀的那些) 的對(duì)象。在這種情況下,解釋器會(huì)暫停下來(lái),試圖清理所有為引用的循環(huán)。
以上就是如何分析Python自動(dòng)化運(yùn)維開(kāi)發(fā)中的變量,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。