深入理解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的内置函数。

如果变量没有赋值,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

#  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

########################

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变量与常量就是小编分享给大家的全部内容了,希望能给大家一个参考

深入理解Python变量与常量的更多相关文章

  1. python变量与常量内容:

    ''' python变量与常量内容: ''' # 变量:定义世间万物变化的状态 ''' height 180 weight 140 age 18 tree_name yuyang ''' # prin ...

  2. 每天学一点——python变量、常量与数字类型

    python变量.常量与数字类型 常量 (一句话能概括先讲它) 严格来讲,python中除了π与N就没有不变的量 所以,在python中我们识别常量是看它是否全大写(如下图) 变量 变量,顾名思义,就 ...

  3. Python变量,常量,注释

    变量: 由数字字母下划线任意组合,且不能以数字开头. 具有可描述性 不能用Python中的关键字 不要用中文,不要用拼音 常量: python中没有常量,但约定俗成,不可更改的,全部是大写字母命名. ...

  4. 运行第一个python程序,python 变量,常量,注释

    一.运行第一个python程序: print('Hello,world') 保存为.py文件 在cmd窗口: python3x:python  py文件路径 回车 python2x:python  p ...

  5. Python变量与常量

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

  6. Python变量和常量

    1.什么是变量 变量:核心在于变和量儿字,变->变化,量->状态如何定义? x=1 变量名 变量赋值符号:= 变量值:1 其中变量名又称为标识符: 1. 可以是字母,数字,下划线的任意组合 ...

  7. Python变量、常量、数据类型

    1. 变量 变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储Script运行时可更改的程序信息.例如,可以创建一个名为ClickCount的变量来存储用户单击Web页面上某个对象的次 ...

  8. 三.Python变量,常量,注释

    1. 运行python代码. 在d盘下创建一个t1.py文件内容是: print('hello world') 打开windows命令行输入cmd,确定后 写入代码python d:t1.py 您已经 ...

  9. Python 变量和常量及数据类型

    一.变量的命名 变量由字母.数字和下划线组成.变量的第1个字符必须是字母或下划线. 二.变量的赋值 例: x = 1 三.局部变量 局部变量只能在函数或者代码段内使用. 四.全局变量 在函数之外定义的 ...

随机推荐

  1. python预课05 爬虫初步学习+jieba分词+词云库+哔哩哔哩弹幕爬取示例(数据分析pandas)

    结巴分词 import jieba """ pip install jieba 1.精确模式 2.全模式 3.搜索引擎模式 """ txt ...

  2. iframe跨域修改子页面内容或样式

    哈哈 当然不能啦 要是能修改百度logo早就是我的头像了

  3. 导入Excel——解析Excel——优化

    package com.it.excel.excelLearn; import java.io.FileInputStream; import java.io.IOException; import ...

  4. js沉思录一:js的核心概念

    js的核心概念: 原型.对象(Object).函数(Function); 原型:路由路径上非叶子结点的对象: 对象:无序属性(包括函数)的集合: 函数:函数上下文的集合: 原型: 原型的创建.指定.修 ...

  5. static在Swift 中表示 “类型范围作用域”

    In Swift, however, type properties are written as part of the type’s definition, within the type’s o ...

  6. 洛谷 P1991 无线通讯网 题解

    P1991 无线通讯网 题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫 ...

  7. yarn和npm的对比,以及项目中使用方式

    相比npm 的优点 1.npm安装是串行,而yarn是并行,速度大大提升 2.已经下载过的包会被缓存,无需重复下载,更关键的是,支持离线安装 3.精准的版本控制,加上验证每个包的完整性,保证每次安装的 ...

  8. GoCN每日新闻(2019-10-31)

    GoCN每日新闻(2019-10-31) GoCN每日新闻(2019-10-31) 1. Go语言继承的其他语言的优秀之处 https://spf13.com/presentation/the-leg ...

  9. 多catch块的代码优化

    一.多catch块的代码优化 在写代码时,多行存在不同的异常,使用try catch的话,习惯性的是有多个catch,如下所示: 注意到warning,文字描述如下: Reports identica ...

  10. 东芝300D粉盒清零

    东芝300D粉盒清零 1:打开前盖 2:按"OK"键3秒,等 显示 "更换硒鼓"(注:不用选 是/否,直接进入第3步) 3:按"启用"键 4 ...