變量是什么
變量是一個計算程序用做存儲信息所引用的薄风。他們還提供一種標簽數(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é)果為:
Python能自由改變變量類型的特征被稱為動態(tài)類型。并不是所有的語言都支持動態(tài)類型俱箱。在靜態(tài)類型的語言中国瓮,變量有事先說明好的類型。特定類型的數(shù)據(jù)必須存入特定類型的變量。相比于靜態(tài)類型乃摹,動態(tài)類型顯得更加靈活便利禁漓。
變量定義規(guī)范
聲明變量
# _*_ 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)存中表示如下:
如果做了如下改變呢:
#!/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)存中表示如下:
我們再來變一下呢:
#!/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)存中表示如下:
總結(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
通過上面這個示例,我們可以大概的來理解一下垃圾回收機制是如何工作的:
- 創(chuàng)建一個變量name,指向'nock'的內(nèi)存地址烂琴;
- 如果'nock'這個值之前沒有在內(nèi)存中創(chuàng)建爹殊,那么現(xiàn)在創(chuàng)建它,并讓這個內(nèi)存地址的引用數(shù)+1奸绷,此時等于1梗夸;
- 然后我們對變量name進行重新賦值,讓其執(zhí)行'lucky'的內(nèi)存地址号醉;
- 那么此時'nock'值的引用數(shù)現(xiàn)在就變成0了反症,當Python一旦檢測到某個內(nèi)存地址的引用數(shù)為0時,就會把這個內(nèi)存地址給刪掉畔派,從而釋放內(nèi)存空間铅碍。
- 最后變量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的變量的所有知識到這里就寫完成了,希望讀到這里的朋友奋单,你有所收獲锉试。