Python变量与常量
变量是计算机内存中的一块区域,变量可以存储规定范围内的值,而且值可以改变。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。常量是一块只读的内存区域,常量一旦被初始化就不能被改变。
变量命名字母、数字、下划线组成,不能以数字开头,前文有说不在赘述。
变量赋值
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)
- ########################
- #运行结果
- #
- #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保留字用于抛出异常。
Python变量与常量的更多相关文章
- 深入理解Python变量与常量
深入理解Python变量与常量 变量是计算机内存中的一块区域,变量可以存储规定范围内的值,而且值可以改变.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中.常量是一块只读的内 ...
- python变量与常量内容:
''' python变量与常量内容: ''' # 变量:定义世间万物变化的状态 ''' height 180 weight 140 age 18 tree_name yuyang ''' # prin ...
- 每天学一点——python变量、常量与数字类型
python变量.常量与数字类型 常量 (一句话能概括先讲它) 严格来讲,python中除了π与N就没有不变的量 所以,在python中我们识别常量是看它是否全大写(如下图) 变量 变量,顾名思义,就 ...
- Python变量,常量,注释
变量: 由数字字母下划线任意组合,且不能以数字开头. 具有可描述性 不能用Python中的关键字 不要用中文,不要用拼音 常量: python中没有常量,但约定俗成,不可更改的,全部是大写字母命名. ...
- Python变量和常量
1.什么是变量 变量:核心在于变和量儿字,变->变化,量->状态如何定义? x=1 变量名 变量赋值符号:= 变量值:1 其中变量名又称为标识符: 1. 可以是字母,数字,下划线的任意组合 ...
- Python变量、常量、数据类型
1. 变量 变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储Script运行时可更改的程序信息.例如,可以创建一个名为ClickCount的变量来存储用户单击Web页面上某个对象的次 ...
- 三.Python变量,常量,注释
1. 运行python代码. 在d盘下创建一个t1.py文件内容是: print('hello world') 打开windows命令行输入cmd,确定后 写入代码python d:t1.py 您已经 ...
- 运行第一个python程序,python 变量,常量,注释
一.运行第一个python程序: print('Hello,world') 保存为.py文件 在cmd窗口: python3x:python py文件路径 回车 python2x:python p ...
- Python 变量和常量及数据类型
一.变量的命名 变量由字母.数字和下划线组成.变量的第1个字符必须是字母或下划线. 二.变量的赋值 例: x = 1 三.局部变量 局部变量只能在函数或者代码段内使用. 四.全局变量 在函数之外定义的 ...
随机推荐
- 张艾迪(创始人):拥抱单身与自由的Eidyzhang
拥抱单身与自由(Single+Freedom) 拥抱伟大的梦想与理想.年轻一代的张扬与自信 拥抱AOOOiA.Global.224C的一切是我对这个世界的态度 +AOOOiA.Global.224C创 ...
- jdk 安装
安装JDK 选择安装目录 安装过程中会出现两次 安装提示 .第一次是安装 jdk ,第二次是安装 jre .建议两个都安装在同一个java文件夹中的不同文件夹中.(不能都安装在java文件夹的根目录下 ...
- Response返回JSON数据到前台页面
转自博文:<Response JSON数据返回>http://blog.csdn.net/anialy/article/details/8665471 简述: 在servlet填充Resp ...
- 20145236 《Java程序设计》第7周学习总结
20145236 <Java程序设计>第7周学习总结 教材学习内容总结 第十三章 时间与日期 认识时间与日期 时间的度量 格林威治标准时间GMT 格林威治标准时间的正午是太阳抵达天空最高点 ...
- 问题解决The connection to adb is down, and a severe error has occured.
遇到问题描述: 运行android程序控制台输出 [2013-06-25 11:10:32 - MyWellnessTracker] The connection to adb is down, an ...
- java面向对象编程--第十一章 异常处理
1.异常:描述出错信息的对象. 字节码校验时,如发生错误,则会抛出异常. 2.所有异常的父类是Exception,异常可以捕获,可以处理. 所有错误的父类是Error,错误可以捕获,但不能处理. Th ...
- 关于jquery计算页面元素数量
这段jquery计算页面元素数量代码,能不能刷新页面直接输出数量,而不用点计算按钮 <scriptsrc="http://ajax.googleapis.com/ajax/libs/j ...
- Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use.
Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The ...
- Linux中如何让命令在后台运行
1.在下达的命令后面加上&,就可以使该命令在后台进行工作,这样做最大的好处就是不怕被ctrl+c这个中断指令所中断. 2. 那大家可能又要问了,在后台执行的程序怎么使它恢复到前台来运行呢?很简 ...
- 类成员函数作为pthread_create函数参数
from:http://www.cnblogs.com/shijingxiang/articles/5389294.html 近日需要将线程池封装成C++类,类名为Threadpool.在类的成员函数 ...