變量是計算機內存中的一塊區域,變量可以存儲規定范圍內的值,而且值可以改變。基於變量的數據類型,解釋器會分配指定內存,並決定什麼數據可以被存儲在內存中。常量是一塊只讀的內存區域,常量一旦被初始化就不能被改變。
變量命名字母、數字、下劃線組成,不能以數字開頭,前文有說不在贅述。
變量賦值
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的內置函數。參見:https://docs.python.org/3/library/functions.html#id
如果變量沒有賦值,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保留字用於拋出異常。
CentOS上源碼安裝Python3.4 http://www.linuxidc.com/Linux/2015-01/111870.htm
《Python核心編程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm
《Python開發技術詳解》.( 周偉,宗傑).[高清PDF掃描版+隨書視頻+代碼] http://www.linuxidc.com/Linux/2013-11/92693.htm
Python腳本獲取Linux系統信息 http://www.linuxidc.com/Linux/2013-08/88531.htm
在Ubuntu下用Python搭建桌面算法交易研究環境 http://www.linuxidc.com/Linux/2013-11/92534.htm
Python 語言的發展簡史 http://www.linuxidc.com/Linux/2014-09/107206.htm
Python 的詳細介紹:請點這裡
Python 的下載地址:請點這裡