百變星君之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)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市览濒,隨后出現(xiàn)的幾起案子呆盖,更是在濱河造成了極大的恐慌,老刑警劉巖贷笛,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件应又,死亡現(xiàn)場離奇詭異,居然都是意外死亡乏苦,警方通過查閱死者的電腦和手機株扛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門尤筐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人洞就,你說我怎么就攤上這事盆繁。” “怎么了旬蟋?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵油昂,是天一觀的道長。 經(jīng)常有香客問我倾贰,道長冕碟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任匆浙,我火速辦了婚禮安寺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吞彤。我一直安慰自己我衬,他們只是感情好,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布饰恕。 她就那樣靜靜地躺著,像睡著了一般井仰。 火紅的嫁衣襯著肌膚如雪埋嵌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天俱恶,我揣著相機與錄音雹嗦,去河邊找鬼。 笑死合是,一個胖子當著我的面吹牛了罪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播聪全,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼泊藕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了难礼?” 一聲冷哼從身側(cè)響起娃圆,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛾茉,沒想到半個月后讼呢,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡谦炬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年悦屏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡础爬,死狀恐怖甫贯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情幕帆,我是刑警寧澤获搏,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站失乾,受9級特大地震影響常熙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜碱茁,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一裸卫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纽竣,春花似錦墓贿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至穴吹,卻和暖如春幽勒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背港令。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工啥容, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人顷霹。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓咪惠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親淋淀。 傳聞我的和親對象是個殘疾皇子遥昧,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容