深刻理解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变量与常量就是小编分享给你们的所有内容了,但愿能给你们一个参考

相关文章
相关标签/搜索