变量是计算机内存中的一块区域,变量可以存储规定范围内的值,而且值可以改变。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。常量是一块只读的内存区域,常量一旦被初始化就不能被改变。
变量命名字母、数字、下划线组成,不能以数字开头,前文有说不在赘述。
变量赋值
Python中的变量不需要声明,变量的赋值操作即是变量的声明和定义的过程。每个变量在内存中创建都包括变量的标识、名称、和数据这些信息。
Python中一次新的赋值,将创建一个新的变量。即使变量的名称相同,变量的标识并不同。
1
2
3
4
5
6
7
|
x = 1 #变量赋值定义一个变量x print ( id (x)) #打印变量x的标识 print (x + 5 ) #使用变量 print ( "=========华丽的分割线=========" ) x = 2 #量赋值定义一个变量x print ( id (x)) #此时的变量x已经是一个新的变量 print (x + 5 ) #名称相同,但是使用的是新的变量x |
继续赋值
1
2
3
|
x = 'hello python' print ( id (x)) print (x) |
此时x又将成为一个新的变量,而且变量类型也由于所赋值的数据类型改变而改变。
此处,id()为Python的内置函数。参见:https://docs.python.org/3/library/functions.html#id
如果变量没有赋值,Python将认为该变量不存在。
Python支持多个变量同时赋值。
例如:
1
2
3
|
a = ( 1 , 2 , 3 ) #定义一个序列 x,y,z = a #把序列的值分别赋x、y、z print ( "a : %d, b: %d, z:%d" % (x,y,z)) #打印结果 |
1
|
a, b, c = 1 , 2 , "john" |
变量作用域
局部变量是只能在函数或者代码块内使用的变量,函数或者代码块一旦结束,局部变量的生命周期也将结束。局部变量的作用范围只有在局部变量被创建的函数内有效。
例如:在文件1中的fun()中定义了一个局部变量,则该局部变量只能被fun()访问,文件1中定义的fun2()不能访问,也不能被文件2访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#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 ################################ |
1
2
3
4
5
6
7
8
9
10
11
12
|
#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能够访问。
全局变量是能够被不同函数、类或文件共享的变量,在函数之外定义的变量都叫做全局变量。全局变量可以被文件内任何函数和外部文件访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#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。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#添加到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 ####################### |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#添加到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中访问全局变量。
1
2
3
4
5
|
#fileName:file2 import file1 file1.add_num() #g_num1被改变 test = file1.g_num1 + 1 print ( "test :%d" % test) |
应该尽量避免使用全局变量。不同的模块可以自由的访问全局变量,可能会导致全局变量的不可预知性。
全局变量降低了函数或者模块之间的通用性,不同的函数或模块都要依赖于全局变量。同样,全局变量降低了代码的可读性,阅读者可能不知道调用的某个变量是全局变量。
常量
常量是一旦初始化之后就不能修改的固定值。例如:数字"5",字符串"abc"都是常量。
Python中并没有提供定义常量的保留字。Python是一门功能强大的语言,可以自己定义一个常量类来实现常量的功能。
1
2
3
4
5
6
7
8
9
10
|
#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() |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#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变量与常量就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。