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 三.局部变量 局部变量只能在函数或者代码段内使用. 四.全局变量 在函数之外定义的 ...
随机推荐
- Spring注释与简化配置
在Spring 2.5及以后的版本中,提供了注释和命名空间来简化Spring的配置.下面是一些常用配置分享. 1.@Autowired注释 以前给一个Bean配置属性时,Bean必须配置< ...
- Core Data系列文章(一)Core Data基础
在iOS开发数据库SQLite的使用介绍了iOS中使用SQLite对数据进行持久化存储,实际上是对数据库直接进行操作,而苹果专门有一套API来间接的对数据进行持久化存储,而且主要针对用户创建的对象 - ...
- android 获取字符串的方法
字符串数组可以在value文件夹中声明: 书写的内容是: 两者的读取方式略有不同: 如果是读取数字的话, 使用: context.getResources().getStringArray( R.a ...
- javamail 学习及实例
JavaMail,是Sun发布的用来处理email的API,提供给开发者处理电子邮件相关的编程接口.通过使用它可以方便地执行一些常用的邮件传输. 可以看下<java邮件开发详解>第四章和第 ...
- [译]Quartz 框架 教程(中文版)2.2.x 之第一课 开始使用Quartz框架
第一课:开始使用Quartz框架 在你使用调度器之前,需要借助一些具体的例子去理解(谁愿意只是猜啊?).你可以使用SchedulerFactory类来达到程序调度的目的.有一些Quartz框架的用户可 ...
- A-Apple Catching(POJ 2385)
Apple Catching Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8759 Accepted: 4264 De ...
- 实验一 Java开发环境的熟悉境的熟悉
- 运行结果: (一)命令行下Java程序开发 (二)Eclipse下Java程序开发.调试 设置断点和单步运行 单步运行:Step Into(快捷捷F5)和Step Over(快捷捷F5) 使程序直 ...
- Jsp页面中使用fckeditor控件的两种方法 [转]
fckeditor控件请到官方网站下载http://www.fckeditor.net,本例主要用到FCKeditor_2.6.3.zip.fckeditor-java-demo-2.4.1.zip. ...
- 简单分析Java的HashMap.entrySet()的实现
关于Java的HashMap.entrySet(),文档是这样描述的:这个方法返回一个Set,这个Set是HashMap的视图,对Map的操作会在Set上反映出来,反过来也是.原文是 Returns ...
- 一个漂亮灵活的PHP图片验证码
<?php class Imagecode{ private $width ; private $height; private $counts; private $distrubcode; p ...