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

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

所谓常量就是不能改变的变量,我们现实世界中存在这样的不可改变的东西,比如圆周率 π,万有引力常量 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 开头是表示用十六进制表示数值。

cde9c543f34dda0f6c1777a879f11b72.png
  • 对于第二句代码 strtwo = strone,Python 解释器再次在内存中开辟一块内存存放 strtwo 变量(比如内存地址为:0x223399),然后 Python 解释器把 strone 变量内存里面的值(0x8899aa)赋值给 strtwo 的内存,目前执行上面两句代码后的内存模型如下图。

876e1a092f8a031c5ba59634cca04363.png
  • 对于第三句代码 strone = "Hello",Python 解释器首先检查字符串 "Hello" 中的每个字符在内存中是不是存在,如果不存在就给每个字符分配内存空间,如果存在则不给该字符创建内存, Python 解释器再次在内存中开辟一块内存(比如内存地址为:0x8899bb 的地方)存放字符串 "Hello" 中每个字符的地址,然后 Python 解释器把字符串 "Hello" 的地址(0x8899bb)赋值给 strone 的内存,最后的结果是 strone 内存的值为 0x8899bb,strtwo 内存的值为 0x8899aa,如下图。

2458afda5112fb50a2306769e94527ba.png
  • 注意:"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 每一步的内存模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenStack Weekly Rank 2015.08.24

Module  Reviews  Drafted Blueprints  Completed Blueprints  Filed Bugs  Resolved Bugs Cinder  5      1          1            6       13 Swift   10     N/A         N/A           8   …

php如何判断是否新数据类型,php中如何判断变量的数据类型呢?

摘要:下文讲述PHP中判断变量数据类型的方法分享&#xff0c;如下所示&#xff1b;实现思路:方式1&#xff1a;使用gettype函数返回变量的数据类型gettype函数可返回"boolean”、“integer”、“double”(float类型会返回“double”&#xff0c;而非“float”)、“string”…

pytorch卷积神经网络_资源|卷积神经网络迁移学习pytorch实战推荐

点击上方“AI遇见机器学习”&#xff0c;选择“星标”公众号重磅干货&#xff0c;第一时间送达一、资源简介这次给大家推荐一篇关于卷积神经网络迁移学习的实战资料&#xff0c;卷积神经网络迁移学习简单的讲就是将一个在数据集上训练好的卷积神经网络模型通过简单的调整快速移…

php 删除服务器上的文件,php如何删除服务器文件

在php中可以使用“ftp_delete”函数删除服务器文件&#xff0c;其语法是“ftp_delete(ftp_connection,file)”&#xff0c;参数“ftp_connection”表示要使用的FTP连接&#xff0c;参数“file”表示要删除的文件的路径。推荐&#xff1a;《PHP视频教程》PHP ftp_delete() 函数定…

企业生产环境下不同业务的linux分区建议

常规分区方案&#xff1a; /boot: 100M swap:内存的1至1.5倍 / : 剩余硬盘大小 DB及存储&#xff1a;有大量重要的数据 /boot : 100M swap: 内存的1至1.5倍&#xff0c;如果内存大于等于16G&#xff0c;分为8G至16G / &#xff1a;50-200G /data&#xff1a; 硬盘剩余所有大小…

python爬虫ip限制_简单爬虫,突破IP访问限制和复杂验证码,小总结

简单爬虫&#xff0c;突破复杂验证码和IP访问限制好吧&#xff0c;看题目就知道我是要写一个爬虫&#xff0c;这个爬虫的目标网站有一些反爬取意识&#xff0c;所以就有了本文了。我先说说场景吧&#xff1a;由于工作需要&#xff0c;平时有一大堆数据需要在网上查询&#xff0…

php使用双引号,PHP编程双引号怎么使用

PHP编程双引号怎么使用PHP用单引号代替双引号来包含字符串&#xff0c;这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量&#xff0c;单引号则 不会&#xff0c;注意&#xff1a;只有echo能这么做&#xff0c;它是一种可以把多个字符串当作参数的“函数”(译注&…

IOS UITextView自适应高度

LOFTER app需要实现了一个类似iPhone短信输入框的功能&#xff0c;它的功能其实蛮简单&#xff0c;就是&#xff1a;【UITextView的高度随着内容高度的变化而变化】。实现思路应该是&#xff1a; 在UITextView的textChanged事件响应代码里计算输入内容的高度&#xff0c;然后如…

python获取mac窗口程序内容_在Mac OS X中获取当前活动窗口/文档的标题

在Objective-C&#xff0c;简单的答案&#xff0c;用少量可可和大多Carbon Accessibility API是&#xff1a;// Get the process ID of the frontmost application.NSRunningApplication* app [[NSWorkspace sharedWorkspace]frontmostApplication];pid_t pid [app processId…

php实战搭建博客,yii2项目实战-博客管理平台的搭建

作者&#xff1a;白狼 出处&#xff1a;http://www.manks.top/document/yii2-blog-manage.html 本文版权归作者&#xff0c;欢迎转载&#xff0c;但未经作者同意必须保留此段声明&#xff0c;且在文章页面明显位置给出原文连接&#xff0c;否则保留追究法律责任的权利。相信看了…

ACM学习历程—HDU2068 RPG的错排(组合数学)

Description 今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁。RPG给他机会让他猜猜&#xff0c;第一次猜&#xff1a;R是公主&#xff0c;P是草儿&#xff0c;G是月野兔&#xff1b;第二次猜&#xff1a;R…

python训练手势分类器_机器学习零基础?手把手教你用TensorFlow搭建图像分类器|干货...

编者按&#xff1a;Pete Warden是TensorFlow移动团队的技术负责人。曾在Jetpac担任首次技术官。Jetpac的深度学习技术经过优化&#xff0c;可在移动和嵌入式设备上运行。该公司已于2014年被谷歌收购。Pete还曾在苹果公司从事GPU优化领域的图像处理工作&#xff0c;并为OReilly撰…

汉军Hundre考勤数据库数据表分析总结

ar-ATT为考勤刷卡数据库 Att-carRecord为刷卡流水&#xff0c;但是插入时需要根据workrecord表中数据进行判断 ATT-workrecord为运算后明细表存放位置&#xff0c;每次运算后重新生成。 刷卡数据更改方法&#xff1a; 查询序列&#xff1a;SELECT * FROM [AR_att].[dbo].[ATT_…

python内存消耗大吗_如何减少python内存的消耗?

标签&#xff1a;Python 打算删除大量涉及像C和C语言那样的复杂内存管理。当对象离开范围&#xff0c;就会被自动垃圾收集器回收。然而&#xff0c;对于由Python 开发的大型且长期运行的系统来说&#xff0c;内存管理是不容小觑的事情。在这篇博客中&#xff0c;我将会分享关于…

php invalid access,PHP出错消息PHP has encountered an Access Violation at XXXXXXXX 如何解决?...

1、是否zend所需的dll文件所在目录给的权限不够&#xff0c;必须有读取和运行的权限2、如果使用的是windows系统&#xff0c;是否设置过应用池&#xff0c;比如池https://anlijun.co中限制了什么

java class load 类加载

1:what is it jvm把描述类的数据从class字节码文件加载到内存&#xff0c;并对数据进行校验、解析、初始化&#xff0c;最终成为jvm直接使用的数据类型 1、ClassNotFoundExcetpion   我们在开发中&#xff0c;经常可以遇见java.lang.ClassNotFoundExcetpion这个异常&#xf…

python回溯方法的模板_Python基于回溯法子集树模板解决0-1背包问题实例

本文实例讲述了Python基于回溯法子集树模板解决0-1背包问题。分享给大家供大家参考&#xff0c;具体如下&#xff1a;问题给定N个物品和一个背包。物品i的重量是Wi,其价值位Vi &#xff0c;背包的容量为C。问应该如何选择装入背包的物品&#xff0c;使得放入背包的物品的总价值…

debian执行php网页,如何在Debian上安装和使用PHP Composer

php composer是一个包管理工具&#xff0c;它消除了手动维护应用程序的PHP包的麻烦&#xff0c;可以使用composer轻松安装所有必需的包。本篇文章将介绍在Debian系统上安装和配置PHP Composer的方法。1、条件shell使用sudo权限访问正在运行的debian系统。必须安装和配置5.3或更…

python图灵测试_最前沿:基于GAN和RL的思想来训练对话生成,通过图灵测试可期!...

PS&#xff1a;本文分析略深&#xff0c;需要一定的RL和GAN的基础。前两天&#xff0c;Stanford的NLP小组出了一篇神经网络对话生成的论文&#xff1a;标题就是使用对抗学习来做神经对话生成。这个idea非常的赞&#xff01;在我看来是通往图灵测试的正确一步。以前的对话生成&a…

java map 实现 序列化,MapReduce序列化

序列化就是把内存中的对象转换成字节序列以便于存储到磁盘(持久化)和网络传输。反序列化就是将字节序列或者是持久化的数据转换成内存中的对象。内存中的对象只能本地进程使用&#xff0c;断掉后就消失了&#xff0c;也不能被发送到网络上的另一台机器&#xff0c;序列化可以将…