深刻理解Python變量與常量

深刻理解Python變量與常量html

變量是計算機內存中的一塊區域,變量能夠存儲規定範圍內的值,並且值能夠改變。基於變量的數據類型,解釋器會分配指定內存,並決定什麼數據能夠被存儲在內存中。常量是一塊只讀的內存區域,常量一旦被初始化就不能被改變。python

變量命名字母、數字、下劃線組成,不能以數字開頭,前文有說不在贅述。函數

變量賦值htm

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支持多個變量同時賦值。字符串

例如:get

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
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
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
print(local_var)
#NameError: name 'local_var' is not defined
########################it

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 #  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變量與常量就是小編分享給你們的所有內容了,但願能給你們一個參考

相關文章
相關標籤/搜索