百變星君之Python變量

變量是什么

變量是一個計算程序用做存儲信息所引用的。他們還提供一種標簽數(shù)據(jù)與一個描述性的名稱,所以我們的程序可以被讀者和我們自己更清楚地理解。它有助于認為變量保存信息的容器。他們的唯一目的是標簽和數(shù)據(jù)存儲在內(nèi)存中,這些數(shù)據(jù)將被你的程序所使用。

在計算機程序中,變量不僅可以是數(shù)字,還可以是任意數(shù)據(jù)類型, 在python中我們可以把各種類型的數(shù)據(jù)賦值給同一個變量,比如:

#!/usr/bin/env python3
# _*_ coding:utf-8 _*_
# Author: nockgod@gmail.com
# Date: 2017-07-28 10:30

# k1 存儲內(nèi)容為字符串"Good Boy"

k1 = 'Good Boy'
print(type(k1))
print("k1 output value is: %s" % k1)

print("****分割線****" * 8)

# K1 存儲內(nèi)容變?yōu)檎?100
k1 = 100
print(type(k1))
print("k1 output value is: %s" % k1)

運行結(jié)果為:

result.png

Python能自由改變變量類型的特征被稱為動態(tài)類型。并不是所有的語言都支持動態(tài)類型。在靜態(tài)類型的語言中,變量有事先說明好的類型。特定類型的數(shù)據(jù)必須存入特定類型的變量。相比于靜態(tài)類型,動態(tài)類型顯得更加靈活便利。

變量定義規(guī)范

聲明變量

var.png
# _*_ coding:utf-8 _*_

name = "nock"

如上代碼中聲明了一個變量,變量名稱為name,變量name的值為'nock'.

定義變量的規(guī)則

  • 變量名只能是字母、數(shù)字下劃線的任意組合
  • 變量名的第一個字符不能為數(shù)字

以下關(guān)鍵字不能聲明為變量(因為會跟Python內(nèi)置關(guān)鍵字沖突):

['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

在Python3中 exec 不再是關(guān)鍵字,但 nonlocal 是一個新的關(guān)鍵字,還有一些這里就不一一枚舉了。

**注:Python中變量對大小寫敏感,也就是說Name和name是兩個變量名

變量定義方式

駝峰寫法:

CpuNumber = 8
CpuLoad = 5

下劃線寫法:

memory_used = 3
memory_free = 5

明眼人都能看出來下劃線的方式更清晰,官方也是推薦使用下劃線,當然你用駝峰法也是ok的,阿里的Python API接口示例變量名也是下劃線定義,所以你應該選擇哪種呢?

幾個不好變量定義方式舉例:

  • 變量名過長
  • 變量名意思表達不清晰
  • 變量名為中文或者拼音

所以在實際的生產(chǎn)中不要害怕變量名有一定的長度,表意一定要清晰,切記不要使用中文和拼音,不要讓人家去猜你變量的意思,適當?shù)臅r候要注釋,代碼不是寫給你一個人看的哦!

變量賦值詳解

我們上面已經(jīng)簡單的說了聲明變量,下面我們詳細看看Python的變量賦值和其存在形式

#!/usr/bin/env python3
# _*_ coding:utf-8 _*_
# Author: nockgod@gmail.com
# Date: 2017-07-28 10:30

Name = 'nock'
Phone = ’13681042939‘

解釋:當Python解釋器解析到 Name = 'nock'的時候會在內(nèi)存中開辟一個空間存放'nock'字符串,然后Name變量指向存儲'nock'字符串的內(nèi)存地址。

在內(nèi)存中表示如下:

memvar1.png

如果做了如下改變呢:

#!/usr/bin/env python3
# _*_ coding:utf-8 _*_
# Author: nockgod@gmail.com
# Date: 2017-07-28 10:30

Name = 'nock'

# 將變量Phone指向了Name變量的內(nèi)存地址
Phone = Name

在內(nèi)存中表示如下:


memvar2.png

我們再來變一下呢:

#!/usr/bin/env python3
# _*_ coding:utf-8 _*_
# Author: nockgod@gmail.com
# Date: 2017-07-28 10:30

Name = 'nock'

# 將變量Phone指向了Name變量的內(nèi)存地址
Phone = Name

# 將變量Name指向改為'lucky',但是變量Phone并沒有改變
Name = 'lucky'

在內(nèi)存中表示如下:

memvar3.png

總結(jié)
其實變量名字我們可以想象為一個大廈里面各個房間的門牌標,有個門上可能貼著兩個門牌標簽,但是當里面的內(nèi)容變了,它才代表是另外一個另外一個空間了。如果你的內(nèi)容沒有變化,你還是在固定的空間中。

垃圾回收機制

在Python基礎(chǔ)中有一個比較重要的概念那就是垃圾回收機制,通常大家比較忽略這個概念,當然變量內(nèi)存空間的回收也包括在里面,下面我們通過代碼來驗證一下:

>>> a = 1
>>> b = a
>>> id(a), id(b)
(4345374736, 4345374736)

如上所示,首先我們聲明了變量a,且賦值為1,然后又聲明變量b,設(shè)置b等于a,通過之前變量復制詳解我們知道其實b和a指向了同一個內(nèi)存空間,所以我們通過id()這個內(nèi)置函數(shù)可以清楚的看到兩個變量的內(nèi)存地址區(qū)域是相同的。

我們再來看看如下代碼示例:

>>> name = 'nock'
>>> name = 'lucky'
>>> print(name)
lucky

通過上面這個示例,我們可以大概的來理解一下垃圾回收機制是如何工作的:

  1. 創(chuàng)建一個變量name,指向'nock'的內(nèi)存地址;
  2. 如果'nock'這個值之前沒有在內(nèi)存中創(chuàng)建,那么現(xiàn)在創(chuàng)建它,并讓這個內(nèi)存地址的引用數(shù)+1,此時等于1;
  3. 然后我們對變量name進行重新賦值,讓其執(zhí)行'lucky'的內(nèi)存地址;
  4. 那么此時'nock'值的引用數(shù)現(xiàn)在就變成0了,當Python一旦檢測到某個內(nèi)存地址的引用數(shù)為0時,就會把這個內(nèi)存地址給刪掉,從而釋放內(nèi)存空間。
  5. 最后變量name執(zhí)行了'lucky’的內(nèi)存地址空間,所以name就等于'lucky'了。

當然這里我們也可以主動清理變量釋放內(nèi)存,在Python中有一個內(nèi)置函數(shù)del(),他可以刪除你定義的變量,如下所示:

>>> name = 'nock'
>>> name = 'lucky'
>>> print(name)
lucky
>>> id(name)
4349044808
>>> del(name)
>>> id(name)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'name' is not defined

常量

說了這么久變量,我們來說說常量,常量又是什么鬼,常量通常指不變的量,如π 3.141592653..., 或在程序運行過程中不會改變的量。

舉例說明,我們每個人的年齡隨著時間的退役都會增加,那年齡就是一個變量;比如我們都認為的10.1號是國慶節(jié),那這個日期就是一個常量。

在Python中有一個專門的語法代表常量,Python程序員都約定俗成把變量名全部大寫代表常量

NATIONAL_DAY = '10-01'

好到這里我所了解的Python的變量的所有知識到這里就寫完成了,希望讀到這里的朋友,你有所收獲。

WeiXin.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容