深入理解Python变量与常量


Posted in Python onJune 02, 2016

变量是计算机内存中的一块区域,变量可以存储规定范围内的值,而且值可以改变。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。常量是一块只读的内存区域,常量一旦被初始化就不能被改变。

变量命名字母、数字、下划线组成,不能以数字开头,前文有说不在赘述。

变量赋值

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变量与常量

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
########################

深入理解Python变量与常量

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使用PyGreSQL操作PostgreSQL数据库教程
Jul 30 Python
Python中使用items()方法返回字典元素对的教程
May 21 Python
Python中将字典转换为XML以及相关的命名空间解析
Oct 15 Python
python获取外网IP并发邮件的实现方法
Oct 01 Python
Django 浅谈根据配置生成SQL语句的问题
May 29 Python
Python supervisor强大的进程管理工具的使用
Apr 24 Python
深入了解python中元类的相关知识
Aug 29 Python
python序列化与数据持久化实例详解
Dec 20 Python
Python实现aes加密解密多种方法解析
May 15 Python
浅谈keras 的抽象后端(from keras import backend as K)
Jun 16 Python
python进度条显示之tqmd模块
Aug 22 Python
django中ImageField的使用详解
Dec 21 Python
Python中的Descriptor描述符学习教程
Jun 02 #Python
从源码解析Python的Flask框架中request对象的用法
Jun 02 #Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
Jun 02 #Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
Jun 02 #Python
实例解析Python中的__new__特殊方法
Jun 02 #Python
详解Python中的__new__、__init__、__call__三个特殊方法
Jun 02 #Python
Python实现优先级队列结构的方法详解
Jun 02 #Python
You might like
php封装的图片(缩略图)处理类完整实例
2016/10/19 PHP
Extjs学习过程中新手容易碰到的低级错误积累
2010/02/11 Javascript
JavaScript 格式字符串的应用
2010/03/29 Javascript
js 图片等比例缩放代码
2010/05/13 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
Javascript的&amp;&amp;和||的另类用法
2014/07/23 Javascript
js判断当前页面用什么浏览器打开的方法
2016/01/06 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
2016/11/25 Javascript
微信小程序左滑删除效果的实现代码
2017/02/20 Javascript
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
vue.js 微信支付前端代码分享
2018/02/10 Javascript
详解vue在项目中使用百度地图
2019/03/26 Javascript
原生js实现获取form表单数据代码实例
2019/03/27 Javascript
Jquery如何使用animation动画效果改变背景色的代码
2020/07/20 jQuery
jQuery中event.target和this的区别详解
2020/08/13 jQuery
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
利用python获得时间的实例说明
2013/03/25 Python
python操作CouchDB的方法
2014/10/08 Python
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
django DRF图片路径问题的解决方法
2018/09/10 Python
Python单元测试与测试用例简析
2019/11/09 Python
CSS3绘制有活力的链接下划线
2016/07/14 HTML / CSS
AmazeUI中模态框的实现
2020/08/19 HTML / CSS
美国在线面料商店:Online Fabric Store
2018/07/26 全球购物
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
计算机学生的自我评价分享
2014/02/18 职场文书
国培远程培训感言
2014/03/08 职场文书
简单租房协议书范本
2014/08/20 职场文书
中职招生先进个人材料
2014/08/31 职场文书
2015共产党员公开承诺书
2015/01/22 职场文书
同学聚会邀请函
2015/01/30 职场文书
工程部经理岗位职责
2015/02/02 职场文书
教师学习心得体会范文
2016/01/21 职场文书
js实现模拟购物商城案例
2021/05/18 Javascript
继承Win10缺点!教你关闭Win11烦人的网络搜索
2021/11/23 数码科技