变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型,比如我们上节课刚刚学过的基本数据类型或者我们后面要学的自定义数据类型。

所谓常量就是不能改变的变量,我们现实世界中存在这样的不可改变的东西,比如圆周率 π,万有引力常量 G 等等都是不可改变的量。

本节我们学习变量和常量的定义和语法。

变量

  • 在程序中我们用一个变量名来表示变量,变量名的写法必须是大小写英文,数字和_的组合,且记不能用数字开头。小说明:英文符号 # 表示注释,# 后面的内容程序在执行时会忽略掉,只有我们程序员才能看到。
name = "jack"
NAME = "jack"
_name = "jack"
name2 = "jack"
2name = "jack"  # 错误:数字不能在前面
name! = "jack"  # 错误:不支持其它字符

  • Python 中内置一些关键字(我们可以使用 keyword 模块提供的函数打印出当前 Python 解释器规定的所有关键字,注意 Python 版本不同,所规定的关键字有所变化),虽然这些关键字符合变量的命名规则,但是 Python 解释器规定不能使用这些关键字作为变量名,否则解释器报语法错误。
import keyword
print(keyword.kwlist)  # 列出当前 Python 解释器的所有关键字and = 9  # 关键字 and 不可以作为变量名

  • 在 Python 中,英文等号 = 是赋值运算符,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,程序中的等号和数学上的等号不是一个意思, Python 程序中用两个等号来表示数学上的等号。
data = 2
print(data)
data = True
print(data)
data = "老鸟Python"
print(data)
print(2 == 2)

  • 我们也可以把一个变量赋值给另一个变量,这个操作实际上是修改变量指向令一个变量所指向的数据,看如下代码。
strone = "Python"
strtwo = strone
strone = "Hello"print(strone)
print(strtwo)

  • 我们对以上代码进行分析,看看每一句代码在内存中是如何表示的,对于第一句代码 strone = "Python",Python 解释器首先检查字符串 "Python" 中的每个字符在内存中是不是存在,如果不存在就给每个字符分配内存空间,如果存在则不给该字符创建内存,然后 Python 解释器再次在内存中开辟一块内存(比如内存地址为:0x8899aa 的地方)存放字符串 "Python" 中每个字符的地址,然后 Python 解释器再次在内存中开辟一块内存存放 strone 变量(比如内存地址为:0x223388), strone 变量的值就是字符串 "Python"的地址。注意:0x 开头是表示用十六进制表示数值。
  • 对于第二句代码 strtwo = strone,Python 解释器再次在内存中开辟一块内存存放 strtwo 变量(比如内存地址为:0x223399),然后 Python 解释器把 strone 变量内存里面的值(0x8899aa)赋值给 strtwo 的内存,目前执行上面两句代码后的内存模型如下图。
  • 对于第三句代码 strone = "Hello",Python 解释器首先检查字符串 "Hello" 中的每个字符在内存中是不是存在,如果不存在就给每个字符分配内存空间,如果存在则不给该字符创建内存, Python 解释器再次在内存中开辟一块内存(比如内存地址为:0x8899bb 的地方)存放字符串 "Hello" 中每个字符的地址,然后 Python 解释器把字符串 "Hello" 的地址(0x8899bb)赋值给 strone 的内存,最后的结果是 strone 内存的值为 0x8899bb,strtwo 内存的值为 0x8899aa,如下图。
  • 注意:"Hello"字符串中 有两个 l 字符成员,在 Python 解释器第一次给 l 分配内存后,就不会再给第二个 l 分配内存了,所以字符串 "Hello" 中两个 l 成员的内存地址是一样的,大家可以通过 Python 的 id 函数验证一下字符串中两个 l 成员的地址是否一样。
strone = "Hello"
print(id(strone[2])) # 第一个 <code>l</code> 成员的内存地址
print(id(strone[3])) # 第二个 <code>l</code> 的内存地址 

常量

  • 所谓常量就是不能改变的变量,Python 中定义常量和其它语言中定义常量不同,比如 c++ 语言可以在变量名前加上关键字 const 来定义这个变量是常量,常量在定义的时候必须初始化,在这之后就不能修改该常量的值,否则编译器会报错。 Python 语言没有关键字可以把一个变量定义成一个常量,所以 Python 语言本身并没有常量的语法定义,但我们一般对全大写字母命名的变量来假定它是常量,程序员本身约定成俗就行了。
PI = 3.14159  # 告诉程序员变量 PI 不要修改。
PI = 3.2      # 虽然修改编译器不会报错,但最好不要修改。
print(PI)

  • 在任何编程语言中,字符串都是存放在常量区,所以我们都说字符串是常量值,也就是说任何一个变量的值如果是字符串的话,我们则不能通过该变量修改字符串内的值。
strone = "Hello"
strone[1] = "x"  # Python 解释器会报错

  • Python 基本类型中的数字,字符串,None 和 bool 值(True 和 False)本身不能修改,我们通常把这些数据类型的值叫做右值,但在 Python2 中布尔值可以修改。
8 = 9               # 8是右值,并且 8 本身不符合变量名命名规则
"hello" = "byebye"  # "hello" 是右值,并且不符合变量名命名规则
None = 8            # None 是右值,不可以修改
False = True        # False 是右值,不可以修改

本节重要知识点

  • 深刻理解 Python 语言中变量的内存模型。
  • 要知道 python 中的常量的约定写法。

作业

画出三句代码 dataone = 8, datatwo = 5, dataone = datatwo 每一步的内存模型。

python 定义变量_第三章(第2节):变量和常量相关推荐

  1. Python基础——PyCharm版本——第三章、数据类型和变量(超详细)

  2. OpenCV函数简记_第三章数字图像的滤波处理(方框,均值,高斯,中值和双边滤波)

    系列文章目录 OpenCV函数简记_第一章数字图像的基本概念(邻域,连通,色彩空间) OpenCV函数简记_第二章数字图像的基本操作(图像读写,图像像素获取,图像ROI获取,图像混合,图形绘制) Op ...

  3. c语言中,x-y,'105',ab,7f8那个是正确的,C语言程序设计_第三章 数据.ppt

    C语言程序设计_第三章 数据 * 运算符功能 与运算量关系 要求运算量个数 要求运算量类型 运算符优先级别 结合方向 结果的类型 学习运算符应注意 * 基本算术运算符: + - * / % 结合方向: ...

  4. 管理系统中计算机应用课件,管理系统中计算机应用_第三章课件.ppt

    <管理系统中计算机应用_第三章课件.ppt>由会员分享,提供在线免费全文阅读可下载,此文档格式为ppt,更多相关<管理系统中计算机应用_第三章课件.ppt>文档请在天天文库搜索 ...

  5. (第二版)零基础入门Python小甲鱼-笔记-第三章-p5

    (第二版)零基础入门Python小甲鱼-笔记-第三章-p5 变量和字符串(下) 上节课讲了有些字符比如换行符.TAB制表符还有单引号.双引号等等...可以通过转义字符来实现,今天来谈谈原始字符串 1. ...

  6. 《精通数据仓库设计》中英对照_第三章

    <精通数据仓库设计>中英对照_第三章 第二部分 模型开发 数据仓库应该表示企业数据的各个方面,这些方面以主题域和业务数据模型开始.我们将在第3章使用一个假想的公司,指导一步一步地开发这两个 ...

  7. Lync Server 2010的部署系列_第三章 证书、架构、DNS规划

    Lync Server 2010的部署系列_第三章 证书.架构.DNS规划 一.证书规划 组件 使用者名称 使用者备用名称条目/顺序 证书颁发机构 (CA) 备注 边缘外部接口 Sip.Giantha ...

  8. ArcGIS for Desktop入门教程_第三章_Desktop软件安装 - ArcGIS知乎-新一代ArcGIS问答社区...

    原文:ArcGIS for Desktop入门教程_第三章_Desktop软件安装 - ArcGIS知乎-新一代ArcGIS问答社区 1 软件安装 1.1 安装前准备 请确认已经收到来自Esri中国( ...

  9. R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、为指定变量添加单位信息、自定义overall的标签名称

    R语言使用table1包绘制(生成)三线表.使用单变量分列构建三线表.为指定变量添加单位信息.自定义overall的标签名称 目录

最新文章

  1. 干货 | 清华大学郑方:语音技术用于身份认证的理论与实践
  2. File Transfer(并查集)
  3. 做面板数据分位数回归模型_面板数据向量自回归模型
  4. 分享JavaScript开发实战经验
  5. service mysqld start,Failed to start mysqld.service: Access denied
  6. 为什么我喜欢Spring bean别名
  7. 如何打开pr_debug调试信息
  8. Redmi K50电竞版细节揭晓:金属中框+弹出式肩键2.0
  9. C#中英文逗号之间的相互转化
  10. FileUtils入门使用
  11. php宝宝起名,宝宝在线起名取名大全
  12. SaaS-HRM(5)系统用户权限设计(角色管理、权限和资源管理)
  13. h5打开小程序的方法 总结
  14. python中ctype的应用,协议解析,C语言与python的完美映射,结构体与字符串的相互转换
  15. 服务机器人分类和发展趋势分析
  16. 极坐标xy的转换_极坐标与直角坐标的转化
  17. 【黄啊码】MySQL入门—4、掌握这些数据筛选技能比你学python还有用-1
  18. 松下串口PLC远程上下载程序
  19. Redis( 缓存篇 ==> 互斥锁解决缓存击穿
  20. 读书笔记(六)--Catena

热门文章

  1. Android 使用控件自定义背景实例
  2. element-ui如何进行调试
  3. 创建接口匿名实现类的对象的四种方法
  4. 26 | 红黑树(下):掌握这些技巧,你也可以实现一个红黑树
  5. MySQL与MongoDB的区别
  6. android蓝牙4.0使用方法
  7. 【C++深度剖析教程6】C++之友元
  8. C#链接mysql 新手容易出错的问题
  9. PHP中的常用关键字
  10. Android WebView Long Press长按保存图片到手机