国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

深入理解Python變量與常量

2019-11-25 16:45:49
字體:
供稿:網(wǎng)友

變量是計(jì)算機(jī)內(nèi)存中的一塊區(qū)域,變量可以存儲(chǔ)規(guī)定范圍內(nèi)的值,而且值可以改變。基于變量的數(shù)據(jù)類型,解釋器會(huì)分配指定內(nèi)存,并決定什么數(shù)據(jù)可以被存儲(chǔ)在內(nèi)存中。常量是一塊只讀的內(nèi)存區(qū)域,常量一旦被初始化就不能被改變。

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

變量賦值

Python中的變量不需要聲明,變量的賦值操作即是變量的聲明和定義的過程。每個(gè)變量在內(nèi)存中創(chuàng)建都包括變量的標(biāo)識(shí)、名稱、和數(shù)據(jù)這些信息。

 Python中一次新的賦值,將創(chuàng)建一個(gè)新的變量。即使變量的名稱相同,變量的標(biāo)識(shí)并不同。

x = 1 #變量賦值定義一個(gè)變量xprint(id(x)) #打印變量x的標(biāo)識(shí)print(x+5) #使用變量print("=========華麗的分割線=========")x = 2 #量賦值定義一個(gè)變量xprint(id(x)) #此時(shí)的變量x已經(jīng)是一個(gè)新的變量print(x+5) #名稱相同,但是使用的是新的變量x

繼續(xù)賦值

x = 'hello python'print(id(x))print(x)

 此時(shí)x又將成為一個(gè)新的變量,而且變量類型也由于所賦值的數(shù)據(jù)類型改變而改變。

此處,id()為Python的內(nèi)置函數(shù)。參見:https://docs.python.org/3/library/functions.html#id

如果變量沒有賦值,Python將認(rèn)為該變量不存在。

Python支持多個(gè)變量同時(shí)賦值。

例如:

a = (1,2,3) #定義一個(gè)序列x,y,z = a  #把序列的值分別賦x、y、zprint("a : %d, b: %d, z:%d"%(x,y,z)) #打印結(jié)果
a, b, c = 1, 2, "john"

變量作用域

局部變量是只能在函數(shù)或者代碼塊內(nèi)使用的變量,函數(shù)或者代碼塊一旦結(jié)束,局部變量的生命周期也將結(jié)束。局部變量的作用范圍只有在局部變量被創(chuàng)建的函數(shù)內(nèi)有效。

例如:在文件1中的fun()中定義了一個(gè)局部變量,則該局部變量只能被fun()訪問,文件1中定義的fun2()不能訪問,也不能被文件2訪問。

#fileName:file1def fun():  local_var = 100 #定義一個(gè)局部變量  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:file2import file1file1.fun()print(local_var)#########################運(yùn)行結(jié)果#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能夠訪問。

全局變量是能夠被不同函數(shù)、類或文件共享的變量,在函數(shù)之外定義的變量都叫做全局變量。全局變量可以被文件內(nèi)任何函數(shù)和外部文件訪問。

#fileName:file1g_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在執(zhí)行add_num()函數(shù)時(shí)被改變#g_num2:5 全局變量g_num2在執(zhí)行sub_num()函數(shù)時(shí)被改變

global保留字用于引用全局變量,如果不適用global關(guān)鍵字,在函數(shù)中再為g_num1賦值時(shí)將被解釋為定義了一個(gè)局部變量g_num1。

#添加到sub_num()函數(shù)定義之后,add_num()函數(shù)調(diào)用之前def other():   result = g_num1 + 2 #直接適用全局變量不改變?nèi)肿兞康闹礝K  print("result : %d"%result)other()########################result : 3#result : 4#result : 2#g_num1:3 #g_num2:5 #######################
#添加到sub_num()函數(shù)定義之后,add_num()函數(shù)調(diào)用之前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:file2import file1file1.add_num() #g_num1被改變test = file1.g_num1 + 1print("test :%d"%test)

應(yīng)該盡量避免使用全局變量。不同的模塊可以自由的訪問全局變量,可能會(huì)導(dǎo)致全局變量的不可預(yù)知性。

全局變量降低了函數(shù)或者模塊之間的通用性,不同的函數(shù)或模塊都要依賴于全局變量。同樣,全局變量降低了代碼的可讀性,閱讀者可能不知道調(diào)用的某個(gè)變量是全局變量。

常量

常量是一旦初始化之后就不能修改的固定值。例如:數(shù)字"5",字符串"abc"都是常量。

Python中并沒有提供定義常量的保留字。Python是一門功能強(qiáng)大的語言,可以自己定義一個(gè)常量類來實(shí)現(xiàn)常量的功能。

#fileName:const.pyclass _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] = valueimport syssys.modules[__name__] = _const()
#fileName:const_2.pyimport constconst.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這個(gè)變量已經(jīng)被賦值"zhangsan"不能繼續(xù)被賦值,所以拋出異常。raise保留字用于拋出異常。

以上這篇深入理解Python變量與常量就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 洪洞县| 武汉市| 灌阳县| 凤台县| 宕昌县| 哈密市| 柯坪县| 盐源县| 辉南县| 平乐县| 会理县| 章丘市| 苍梧县| 赣榆县| 江津市| 高要市| 弋阳县| 垦利县| 湘乡市| 浙江省| 昌黎县| 营山县| 新昌县| 兰州市| 洛阳市| 墨竹工卡县| 汕尾市| 九江市| 罗平县| 南和县| 锡林郭勒盟| 安庆市| 肃宁县| 灵寿县| 吐鲁番市| 康乐县| 佛学| 辉县市| 高青县| 宣城市| 长汀县|