
深入理解Python變量與常量
變量是計算機內存中的一塊區域,變量可以存儲規定范圍內的值,而且值可以改變?;谧兞康臄祿愋?,解釋器會分配指定內存,并決定什么數據可以被存儲在內存中。常量是一塊只讀的內存區域,常量一旦被初始化就不能被改變。
變量命名字母、數字、下劃線組成,不能以數字開頭,前文有說不在贅述。
變量賦值
Python中的變量不需要聲明,變量的賦值操作即是變量的聲明和定義的過程。每個變量在內存中創建都包括變量的標識、名稱、和數據這些信息。
Python中一次新的賦值,將創建一個新的變量。即使變量的名稱相同,變量的標識并不同。
x = 1 #變量賦值定義一個變量x
print(id(x)) #打印變量x的標識
print(x+5) #使用變量
print("=========華麗的分割線=========")
x = 2 #量賦值定義一個變量x
print(id(x)) #此時的變量x已經是一個新的變量
print(x+5) #名稱相同,但是使用的是新的變量x
繼續賦值
x = 'hello python'
print(id(x))
print(x)
此時x又將成為一個新的變量,而且變量類型也由于所賦值的數據類型改變而改變。
此處,id()為Python的內置函數。
如果變量沒有賦值,Python將認為該變量不存在。
Python支持多個變量同時賦值。
例如:
a = (1,2,3) #定義一個序列
x,y,z = a #把序列的值分別賦x、y、z
print("a : %d, b: %d, z:%d"%(x,y,z)) #打印結果
a, b, c = 1, 2, "john"
變量作用域
局部變量是只能在函數或者代碼塊內使用的變量,函數或者代碼塊一旦結束,局部變量的生命周期也將結束。局部變量的作用范圍只有在局部變量被創建的函數內有效。
例如:在文件1中的fun()中定義了一個局部變量,則該局部變量只能被fun()訪問,文件1中定義的fun2()不能訪問,也不能被文件2訪問。
#fileName:file1
def fun():
local_var = 100 #定義一個局部變量
print(local_var)
def fun2():
zero = local_var - 100 #fun2中使用局部變量(不可以)
print("get zero : %d"%zero)
fun()
#fun2()
print("local_var -1 = %d"%(local_var - 1)) #文件1中使用局部變量(不可以)
################################
#Traceback (most recent call last):
# File "E:/python/file1.py", line 10, in <module>
# print("local_var -1 = %d"%(local_var - 1))
#NameError: name 'local_var' is not defined
################################
#Traceback (most recent call last):
# File "E:/python/file1.py", line 9, in <module>
# fun2()
# File "E:/lichenli/python/file1.py", line 6, in fun2
# zero = local_var - 100
#NameError: name 'local_var' is not defined
################################
#fileName:file2
import file1
file1.fun()
print(local_var)
########################
#運行結果
#100
#Traceback (most recent call last):
# File "E:\python\file2.py", line 4, in <module>
# print(local_var)
#NameError: name 'local_var' is not defined
########################
fun()中定義的局部變量就只有fun能夠訪問。
全局變量是能夠被不同函數、類或文件共享的變量,在函數之外定義的變量都叫做全局變量。全局變量可以被文件內任何函數和外部文件訪問
#fileName:file1
g_num1 = 1 #定義全局變量
g_num2 = 2 #定義全局變量
def add_num():
global g_num1 #引用全局變量
g_num1 = 3 #修改全局變量的值
result = g_num1 + 1
print("result : %d"%result)
def sub_num():
global g_num2
g_num2 = 5
result = g_num2 - 3
print("result : %d"%result)
add_num()
sub_num()
print("g_num1:%d "%g_num1)
print("g_num2:%d "%g_num2)
#result : 4 result為局部變量
#result : 2
#g_num1:3 全局變量g_num1在執行add_num()函數時被改變
#g_num2:5 全局變量g_num2在執行sub_num()函數時被改變
global保留字用于引用全局變量,如果不適用global關鍵字,在函數中再為g_num1賦值時將被解釋為定義了一個局部變量g_num1。
#添加到sub_num()函數定義之后,add_num()函數調用之前
def other():
result = g_num1 + 2 #直接適用全局變量不改變全局變量的值OK
print("result : %d"%result)
other()
#######################
#result : 3
#result : 4
#result : 2
#g_num1:3
#g_num2:5
#######################
#添加到sub_num()函數定義之后,add_num()函數調用之前
def other():
g_num1 = 10
result = g_num1 + 2
print("result : %d"%result)
other()
####################
#result : 12
#result : 4
#result : 2
#g_num1:3
#g_num2:5
####################
在文件2中訪問全局變量。
#fileName:file2
import file1
file1.add_num() #g_num1被改變
test = file1.g_num1 + 1
print("test :%d"%test)
應該盡量避免使用全局變量。不同的模塊可以自由的訪問全局變量,可能會導致全局變量的不可預知性。
全局變量降低了函數或者模塊之間的通用性,不同的函數或模塊都要依賴于全局變量。同樣,全局變量降低了代碼的可讀性,閱讀者可能不知道調用的某個變量是全局變量。
常量
常量是一旦初始化之后就不能修改的固定值。例如:數字"5",字符串"abc"都是常量。
Python中并沒有提供定義常量的保留字。Python是一門功能強大的語言,可以自己定義一個常量類來實現常量的功能。
#fileName:const.py
class _const:
class ConstError(TypeError):pass
def __setattr__(self,name,value):
#if self.__dict__.has_key(name): 3.x之后has_key被廢棄
if name in self.__dict__:
raise self.ConstError("Can't rebind const(%s)"%name)
self.__dict__[name] = value
import sys
sys.modules[__name__] = _const()
#fileName:const_2.py
import const
const.name='zhangsan'
const.name='lisi'
##################################
#Traceback (most recent call last):
# File "E:/python/const_2.py", line 4, in <module>
# const.name='lisi'
# File "E:/python\const.py", line 7, in __setattr__
# raise self.ConstError("Can't rebind const(%s)"%name)
#const._const.ConstError: Can't rebind const(name)
##################################
name這個變量已經被賦值"zhangsan"不能繼續被賦值,所以拋出異常。raise保留字用于拋出異常。
以上這篇深入理解Python變量與常量就是小編分享給大家的全部內容了,希望能給大家一個參考
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
CDA數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25