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,一经查实,立即删除!

相关文章

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() 函数定…

java class load 类加载

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

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

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

JAVA_if或者怎么用,Java If语句

Java教程 - Java If语句Java if语句用于根据条件执行一个代码块。Java If语句下面是Java if语句的最简单形式:if(condition)statement;condition是一个布尔表达式。如果condition是true那么执行语句。如果condition是false&#xff0c;那么绕过语句。以下代码根据an的值输出消息…

iOS开发——高级技术本地化与国际化详解

本地化与国际化详解效果如下&#xff1a;英语&#xff1a; 中文&#xff1a; 具体实现如下&#xff1a;一。先做准备&#xff1a;设置程序本地化在xcode点击程序图标…

Matlab经纬度坐标转换xy坐标,经纬度坐标系转换为UTM坐标系(matlab)

如题所说&#xff0c;直接上程序。验证自己做一下&#xff0c;结果应该是对的。诚不我欺。(注意&#xff1a;程序名与函数名保持一致&#xff01;&#xff01;&#xff01;)function[shuchu]lat_lon2utm(lat_shuru,lon_shuru)%地理经纬度坐标转换为UTM坐标size_shuzusize(lat_s…

matlab空间曲面拟合,matlab如何进行曲面拟合

matlab如何进行曲面拟合以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;在一丘陵地带测量高程&#xff0c;x和 y方向每隔100米测一个点&#xff0c;得高程如下表&#xff0c;试插值一曲面&am…

treegrid.bootstrap使用说明

treegrid.bootstrap使用说明 这个插件是用来做有层次的表格的&#xff0c;大概如图&#xff1a; 官网 http://maxazan.github.io/jquery-treegrid/ 使用这个控件之前需要引入以下css及js&#xff08;因为用到了 bootstrap.js 所以加上了 bootstrap的样式和脚本&#xff09; bo…

matlab 条形图横坐标,Matlab条形图bar横坐标间距设置

1. 默认横坐标数据 X[x1, x2, x3, x4, x5, x6] %一行六列bar(X); %绘制基础条形图2. 修改横坐标标签#考虑横坐标标签文本较长且字体较大的情况bar(X);set(gca, xticklabels,{Apple, Orange, Banana, Pear, Pitaya, Lemon}, Fontname, Times New Roman, Fontsize, 16); %修…

stm32 485和232可以用同一个串口吗_STM32的复用时钟何时开启?

STM32的AFIO时钟真的是在开启引脚复用功能的时候开启吗&#xff1f;其实并不是~什么是复用&#xff1f;我们知道&#xff0c;STM32有很多外设&#xff0c;这些外设的外部引脚都是与GPIO共用的。我们可以通过软件来配置引脚作为GPIO引脚还是作为外设引脚。当引脚配置为外设引脚时…

php 简析对象,PHP白盒审计工具RIPS源码简析

RIPS是一款对PHP源码进行风险扫描的工具&#xff0c;其对代码扫描的方式是常规的正则匹配&#xff0c;确定sink点&#xff1b;还是如flowdroid构建全局数据流图&#xff0c;并分析存储全局数据可达路径&#xff1b;下面就从其源码上略探一二。1、扫描流程分析其源码前&#xff…

左右伸缩_冬季装修为啥要留伸缩缝?等到天热地板开裂就晚了!合肥人注意下...

后台有粉丝问&#xff1a;冬天真的不适合做装修吗&#xff1f;假的&#xff0c;这句话不要再传了。每个季节都会有利有弊&#xff0c;只不过冬季施工过程中干燥的比较快&#xff0c;装修的时候对施工要求的更严格。就拿伸缩缝来说吧&#xff0c;冬天装修时不注意&#xff0c;等…

红色警戒2修改器原理百科(七)

&#xff08;十五&#xff09;科技全开——前方高能&#xff0c;BOOM 其实这一小节&#xff0c;最晚应该在第四篇的十小节来讲述的&#xff0c;这样是按照一条线索来讲的&#xff0c;容易理解和把握笔者修改时的思路&#xff0c;以一点逐渐扩大。由于笔者的一些原因&#xff08…

wpf click事件在触摸屏上点击第一次没反应_你的PLC和你的触摸屏为什么总是通讯不上?...

三菱PLC全系列资料免费送啦&#xff01;想要撩我(点击上方红字&#xff0c;免费领资料)很多师傅有以下这些问题&#xff0c;其实除去厂家自行定义的通讯方式外&#xff0c;我们在做项目的时候最常用的通讯方式&#xff0c;通讯不上无非就是这几个原因是否选择正确通讯协议(modb…

ubuntu 开放端口_Masscan端口扫描工具使用小手册

1Masscan介绍1.1 Masscan简介1) nmap是端口扫描仪的合法王位&#xff0c;而今天仍然是最通用的选择。但对于纯粹的速度也有一些已经超越了它&#xff0c;包括scanrand&#xff0c;unicornscan&#xff0c;zmap&#xff0c;和现在的masscan(https://github.com/robertdavidgraha…

hdu4277 暴力

hdu4277 暴力 USACO ORZ Time Limit : 5000/1500ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 4 Accepted Submission(s) : 2 Problem DescriptionLike everyone, cows enjoy variety. Their current fancy is new shapes for pastu…

多线程设置操作时间间隔_听说,有位Java程序员学完这59道多线程面试题之后,直接面上阿里...

前言多线程是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程&#xff0c;进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。软件多线程&…

svm多分类代码_监督学习——分类算法I

本文是监督学习分类算法的第一部分&#xff0c;简单介绍对样本进行分类的算法&#xff0c;包括判别分析(DA)支持向量机(SVM)随机梯度下降分类(SGD)K近邻分类(KNN)朴素贝叶斯分类(NaiveBayes)判别分析(Discriminant Analysis) 判别分析是基于条件概率的分类方法&#xff0c;可以…

oracle awr报告提取,Oracle AWR报告提取方法

默认情况下&#xff0c;oracle是启用数据库统计收集这项功能(AWR)通过show parameter statistics_level来判断是否启用值为TYPICAL或者ALL表示启用AWR值为BASIC&#xff0c;表示禁用AWR1.当前连接实例的AWR报告提取&#xff1a;?/rdbms/admin/awrrpt以sysdba身份登录。SQL>…