雲端計算開發教程:Python自動化運維開發實戰Python變數

千鋒雲端計算發表於2019-06-12

今天這篇文章是給大家分享一些雲端計算開發教程,今天講解的是:Python自動化運維開發實戰Python變數.

雲端計算開發教程:Python自動化運維開發實戰Python變數

python學習過程中會用到許多資料,那為了方便操作,需要把這些資料分別用一個簡單的名字代表,方便在接下來的程式中引用。

變數就是代表某個資料(值)的名稱。簡單點說變數就是給資料起個名字

變數名稱的命名:

由字母數字下劃線組成的,且不能以數字開頭,不能使用關鍵字,區分大小寫。

命名慣例

1. 以單一下劃線開頭的變數名(_X)不會被 from module import *語句匯入

2. 前後有下劃線的變數名(_X_)是系統定義的變數名,對直譯器有特殊意義

3. 以雙下劃線開頭,但結尾沒有雙下劃線的變數名(__X)是類的本地變數

4. 透過互動模式執行時,只有單個下劃線的變數名(_)會儲存最後表示式的結果

python命名規範總結

模組名:小寫字母,單詞之間用_分割,比如ad_stats.py

包名:和模組名一樣

類名:單詞首字母大寫,比如AdStats ConfigUtil

全域性變數名:大寫字母,單詞之間用_分割,比如UMBER  COLOR_WRITE

普通變數:小寫字母,單詞之間用_分割,比如this_is_a_var

例項變數:以_開頭,其他和普通變數一樣,比如_price    _instance_var

私有例項變數(外部訪問會報錯):以__開頭(2個下劃線),其他和普通變數一樣

__private_var

專有變數: __開頭,__結尾,一般為python的自有變數,不要以這種方式命名

__doc__         __class_

變數賦值:

是變數宣告和定義的過程

單個變數賦值

#!/usr/bin/python

# -*- coding: UTF-8 -*-

counter = 100  # 賦值整型變數

miles = 1000.0 # 浮點型

name = "John"  # 字串

print counter

print miles

print name

多個變數賦值

Python允許你同時為多個變數賦值。

例如:

a = b = c = 1

以上例項,建立一個整型物件,值為1,三個變數被分配到相同的記憶體空間上。

同時為多個變數賦不同的值。

例如:

a, b, c = 1, 2, "john"

以上例項,兩個整型物件1和2的分配給變數a和b,字串物件"john"分配給變數c。

變數儲存資料的方式:

一般程式語言變數儲存資料的方式:

變數是計算機記憶體中的一塊區域,變數可以儲存規定範圍內的值,而且值是可變的。

在建立變數時會在記憶體中開闢一個空間。基於變數的資料型別,直譯器會分配指定記憶體,並決定什麼資料可以被儲存在記憶體中。因此,變數可以指定不同的資料型別,這些變數可以儲存整數,小數或字元。

比如c語言在宣告一個變數a之後,會在記憶體中開闢出一塊兒對應的空間,在此空間中可以儲存不同的值,也就是給變數賦予不同的值

python變數在記憶體中儲存值得方式和其他程式語言不同:

在Python中,變數名沒有型別,但物件有

變數名只是對物件的引用(內部實現為指標)

python中是以資料為主,變數a只是相當於一個記憶體空間的標籤,a=1開闢一塊空間儲存1,之後重新複製a=2是重新開闢出新的空間儲存2,變數名稱a換了個位置指向新空間中的2

同樣的地址空間可以有兩個或多個標籤,比如a=1,b=1實際上是a和b指向同一個地址空間

檢視變數指向地址空間的地址:使用id(變數名稱)函式

>>> a=1

>>> id(a)

19882304

>>> b=1

>>> id(b)

19882304

上例發現同一個值賦值給不同變數,實際地址空間未發生變化,只是標籤發生了變化

PYTHON內部的引用計數(SYS.GETREFCOUNT):

什麼是引用計數器:

Python內部記錄著所有使用中的物件有多少引用。一個內部跟蹤變數,稱為一個引用計數器。當物件被建立時,就建立了一個引用計數,當這個物件不再需要時,也就是說,這個物件的引用計數變為0時,它被垃圾回收。(這個只是形象的說一下,並不是嚴格的100%正確,但是通俗的理解往往是最好的學習方式)

增加引用計數:

當物件被建立並(將其引用)賦值給變數時,該物件的引用技術就是被設定為1。 當同一個物件的應用或者是物件又被賦值給其他變數時,或者作為引數傳遞給函式,方法或類例項時,或者被賦值為一個視窗物件的成員時,該物件的一個新的引用,或者稱作別名,就被建立(則該物件的引用計數自動加1)

減少引用計數

當物件的引用被銷燬時,引用計數會減少。最明顯的例子就是當引用離開其作用範圍時,這種情況最經常出現在函式執行結束時,所有區域性變數都被自動銷燬,物件的引用計數也就隨之減少。

當變數被賦值給另外一個物件時,源物件的引用技術也會自動減1

其他造成物件的引用計數減少的方式包括使用del語句刪除一個變數,或者當一個物件的引用計數在以下情況會減少:

1. 一個本地引用離開了其作用範圍,比如函式結束

2. 物件的別名被顯示的銷燬

3. 物件的一個別名被賦值給其他的物件

4. 物件被從一個視窗物件中移除

5. 視窗物件本身被銷燬

例子:

>>> import sys

>>> a="ab"

>>> sys.getrefcount("ab")

3            第一次結果為3

>>> b="ab"

>>> sys.getrefcount("ab")

4             第二次結果+1

>>> b=0   b引用了其他的物件(0),對於"ab"來講就取消了一個引用

>>> sys.getrefcount("ab")

3             結果在上次引用的基礎上-1

注意:在互動式直譯器中帶空格的物件引用次數永遠為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")

垃圾收集 :

不再被使用的記憶體會被一種稱為垃圾收集的機制釋放。像上面說的,雖然直譯器跟蹤物件的引用計數,但是垃圾收集器負責釋放記憶體。垃圾收集器是一塊獨立的程式碼,它用來尋找引用計數為0的物件,他也負責檢查那些雖然引用計數大於0但也該被銷燬的物件。特定情形會導致迴圈引用。

一個迴圈引用發生在當你有至少兩個物件互相引用時,也就是所說的引用都消失時,這些引用仍然存在,這說明只靠引用計數是不夠的。Python的垃圾收集器實際上是一個引用計數器和一個迴圈垃圾收集器。當一個物件的引用計數變為0,直譯器會暫停,釋放掉這個物件和僅有這個物件可訪問的其他物件,作為引用計數的補充,垃圾收集器也會留心被分配的總量很大(以及未透過引用計數銷燬的那些)  的物件。在這種情況下,直譯器會暫停下來,試圖清理所有為引用的迴圈。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69916964/viewspace-2647432/,如需轉載,請註明出處,否則將追究法律責任。

相關文章