Python青少年简明教程:赋值语句

news2024/11/15 15:48:10

Python青少年简明教程:赋值语句

变量赋值是指将一个值分配给变量的过程。Python 支持多种形式的赋值(assignment),包括基本赋值、多重赋值、链式赋值和解包赋值等。

为了深入理解Python赋值语句机制,先了解一下id()函数。

在Python中,id()函数用于获取对象的唯一标识符(即内存地址)。每个对象(Python语言中,所有的 数据 都被称之为 对象)在内存中都有一个唯一的标识符,可以通过id()函数来获取。

例如id(8.53),它会返回8.53的唯一标识符(内存地址)。这个标识符是一个整数值,用于唯一标识该对象在内存中的位置,类似如2200635092656,注意,这样的值在不同的运行时环境中可能会有所不同,因为它取决于内存管理和对象分配的具体实现。Python的内存管理和对象分配模型是自动的,由Python的内存管理器负责。

看下面情况

解释:在Python中,id()函数返回对象的内存地址,这是每个对象的唯一标识符。

首先,当调用id(21.37)时,Python创建了一个浮点数对象21.37并返回了它的内存地址,即2491682696880。如下图所示:

然后,创建了一个变量a并将其赋值为21.37。此时,Python再次创建了一个新的浮点数对象21.37(因为浮点数是不可变的),并将a指向这个新对象。因此,当调用id(a)时,它返回的是这个新对象的内存地址,即2491682692176。如下图所示:

接下来,创建了一个新的变量b并将其赋值为a。在这种情况下,Python并没有创建新的对象,而是让b指向了a所指向的那个对象。因此,a和b实际上是指向同一个对象,所以id(b)返回的也是同一个内存地址2491682692176。如下图所示:

最后,当打印b时,它显示的是b所指向的那个对象的值,即21.37。

Python中变量赋值语句variable = expression的机制:

1.计算表达式(expression)的值:Python首先会计算等号右边的表达式的值。

2.创建新对象:如果表达式的结果不是已存在的对象,Python会在内存中创建一个新的对象来存储这个结果。

3.变量(variable)绑定:Python会将变量名绑定到新创建的对象,或者说变量指向这个对象。变量实际上是一个引用(或名称),它被绑定到这个对象上。这个过程也被称为“名称绑定”。

这是Python变量赋值的基本机制。

需要注意的是,对于某些特定类型的对象——如小整数(-5到256之间的整数),和特定短字符串,如比较短的只包含ASCII字符,不包含空格,数字或者特殊字符的字面量字符串。当Python解释器启动时,它会预先创建并缓存一定范围内的整数和一些常用的短字符串对象。当你在代码中使用这些值时,Python并不会创建新的对象,而是直接引用已经存在的对象。这就是所谓的"interning"机制。这种机制可以提高Python的运行效率,因为对于这些常用的小整数和短字符串,Python可以避免反复创建和销毁对象,从而节省内存和CPU资源。

下面通过一些代码示例来更好地理解这个过程。

Python 中变量再赋值情况

创建了一个名为 dollars 的变量,并将 2.75 赋值给它

Dollars = 2.75

给变量 dollars 赋以一个新值99.95,当给变量 dollars 赋以一个新值99.95时,虽然旧值 2.75 依然保存在计算机的存储器中,但是因为没有变量引用它,所以这个值已不能再被使用。参见下图:

注意,当存储器中的值,不再被变量引用时,Python 解释器将通过所谓的垃圾收集机制来进行处理,自动地将它们移出存储器。【Python使用引用计数来进行内存管理。Python的引用计数是其内存管理的基础机制之一。每个对象都维护一个计数器,记录有多少引用指向它。这个机制的主要目的是确定何时可以安全地删除一个对象并回收其占用的内存。Python的垃圾回收机制会自动清理不再被用到的值,所以不用担心计算机内存中充满被“丢弃”的无效的值。】

在python中,变量保存的是对象(值)的引用,id()函数可以获取变量在内存中的地址。在Python中,值可以放在内存的某个位置(地址),变量用于引用它们,给变量赋一个新值,原值不会被新值覆盖,变量只是引用了新值。

一定要牢记:在 Python 语言中,变量仅仅是引用存储器中某个数据的名字,并且可以引用任何类型的数据项。

x = 99 语句创建了名为 x 的变量,并赋给它 int 型的值 99。

将一个字符串 'Take me to your leader'赋值给变量 x时,变量 x 不再引用一个 int 型数据,而是引用字符串 'Take me to your leader'。

下面再看看这种情况:

a = 10

b = a

在上述的例子中,我们声明了一个变量 a,其值为 10,然后将 b 也指向 a,这是在内存中的布局是这样的,变量 a 和 b 会指向同一个对象 10,而不是给 b 重新生成一个新的对象。

当执行完 a = a + 10 后,因为整数是不可变对象,所以并不会将 10 变成 20,而是生成一个新的对象 20 ,然后 a 会指向这个新的对象。b 还是指向旧对象 10。

赋值说明

☆基本赋值

最简单的赋值使用符号(=)操作符,将一个值赋给一个变量:

x = 5

name = "Alice"

这里,x被赋值为整数5,name被赋值为字符串"Alice"。

初学者需要注意,符号=在编程中作为赋值操作符的意义和数学中作为等号的意义不同。编程中的赋值表示将右侧的值或表达式的结果赋给左侧的变量。

☆多重赋值

Python允许在一行中对多个变量进行赋值:

a, b, c = 1, 2, 3

☆交换变量赋值

Python提供了一种简洁的方法来交换两个变量的值,而无需借助临时变量,格式:

x, y = y, x

例如:

a = 5
b = 10
a, b = b, a

在上述示例中,a和b的值被交换,a变成10,b变成5。

☆链式赋值

可以在一行中给多个变量赋相同的值:

x = y = z = 0

在上述示例中,整数0被赋值给变量x、y和z。

☆解包赋值

解包赋值允许将一个序列解包并赋值给多个变量。

var = [1, 2, 3]
a, b, c = var

在上述示例中,列表numbers中的元素分别被赋值给变量a、b和c。

☆增强赋值

增强赋值(也称为复合赋值)是一种将操作符与赋值结合在一起的语法,它可以让你更简洁地修改变量的值。Python支持增量赋值运算符,如+=、-=、*=、/=等。如:

x = 5
x += 3  # 等同于 x = x + 3

y = 10
y *= 2  # 等同于 y = y * 2

☆类型推断

Python是动态类型语言,不需要显式声明变量类型:

x = 5  # Python自动将x识别为整数

x = "hello"  # 现在x变成了字符串类型

☆条件赋值

条件赋值(也称为条件表达式或三元运算符)是一种简洁的方式来基于条件来赋值。它允许你在一行代码中完成if-else语句的功能。基本语法是:

value = true_expression if condition else false_expression

工作原理是:

如果condition为True,则value被赋予true_expression的值

如果condition为False,则value被赋予false_expression的值

例如:

x = 10
y = 20
max_value = x if x > y else y
print(max_value)  # 输出: 20

☆变量引用

“变量引用”(variable reference)也称为“变量绑定”(variable binding),它描述了变量和对象之间的关系。是指变量实际上并不存储数据本身,而是存储了指向存储数据的对象的引用(即内存地址)。这意味着变量是对象的“标签”,你可以通过这个标签来访问和操作对象。Python中的每个数据(例如数字、字符串、列表等)都是一个对象,当你给变量赋值时,实际上是创建了一个从变量到对象的引用。多个变量可以引用同一个对象。

对于不可变对象(如整数、字符串),"修改"实际上是创建新对象并重新赋值。

对于可变对象(如列表、字典),可以通过引用直接修改对象。

重要的是要理解,Python中的变量赋值实际上是创建了对象的引用,示例:

# 整数(不可变对象)
a = 5
b = a  # b和a引用同一个对象
print(id(a), id(b))  # 输出相同的ID

a = 6  # a引用新的对象
print(id(a), id(b))  # a和b现在引用不同的对象

# 列表(可变对象)
list1 = [1, 2, 3]
list2 = list1  # list2和list1引用同一个列表对象
list2.append(4)  # 通过list2修改对象
print(list1)  # 输出 [1, 2, 3, 4],list1也被修改

☆常量约定

Python中并没有内置的常量类型,或者说,Python没有真正的常量,,但有一些广泛接受的约定来表示和使用常量。这些约定主要是编程习惯和风格指南,而不是语言强制执行的规则。常量通常使用全大写字母命名,多个单词之间用下划线分隔。例如:

PI = 3.14159
MAX_SIZE = 100

这些约定主要依赖于程序员的自律。Python不会阻止你修改这些“常量”的值。例如:

PI = 3.14159
PI = 3  # 这是合法的,但违反了常量约定

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

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

相关文章

[Meachines] [Easy] Legacy nmap 漏洞扫描脚本深度发现+MS08-067

信息收集 IP AddressOpening Ports10.10.10.4TCP:135,139,445 $ nmap -p- 10.10.10.4 --min-rate 1000 -sC -sV -Pn PORT STATE SERVICE VERSION 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows n…

战略合作篇白皮书:深度革新,赋能企业跃迁

01背景 企业数字化转型已经成为当今商业环境中不可避免的趋势,主要有以下几个原因: 技术发展:随着信息技术的迅猛发展和普及,企业面临着数字化转型的迫切需求。云计算、大数据、人工智能等技术正在改变商业模式和运营方式&#xf…

【C++第十四章】进阶模板

【C第十四章】进阶模板 非类型模板参数🧐 我们创建一个类,可以用模板开一个大小的为N的数组,这样优于用宏来定义N,因为可以在创建对象时可以根据需求更改数组大小。我们称在模板定义中使用的不依赖于模板类型的参数为非类型模板参…

当前A股平均市盈率

再写一篇【不务正业】的 2023-08-23A股平均市盈率 来自乐咕乐股网 当前A股市盈率是否为低点? 不言而喻 ‌当前A股市场的市盈率确实处于相对低位。‌ 根据东方财富Choice最新数据显示数据,截至2024年8月23日,全A市盈率为13.06倍,…

(贪心) LeetCode 45. 跳跃游戏 II

原题链接 一. 题目描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n …

《加油吧少年》热播 编剧蔡璧鸿:创作需要对幽默保持高度关注

近日&#xff0c;校园剧《加油吧少年》正在热播中&#xff0c;该剧以学渣视角&#xff0c;讲述他在高中校园与学霸&#xff0c;女神&#xff0c;死党一起学习&#xff0c;成长和努力拼搏的故事&#xff0c;《加油吧少年》自播出后&#xff0c;便以轻松幽默&#xff0c;诙谐搞笑…

2024口碑最好的四大游泳耳机大揭秘,游泳教练全方位测评分析!

游泳&#xff0c;作为一种全身性的锻炼方式&#xff0c;越来越受到人们的青睐。在水下&#xff0c;人们渴望能够聆听到美妙的音乐&#xff0c;让游泳变得更加有趣和放松。游泳耳机的出现&#xff0c;正是为了满足这一需求。它们不仅能够提供防水、防汗的功能&#xff0c;还能在…

软件测试——自动化测试selenium常用函数

目录 元素的定位cssSelectorxpathxpath语法&#xff1a; 元素定位函数 操作测试对象窗口切换窗口窗口设置大小窗口切换屏幕截图关闭窗口 等待强制等待隐式等待显示等待 浏览器导航弹窗警告弹窗确认弹窗提示弹窗 文件上传浏览器参数设置 元素的定位 web⾃动化测试的操作核⼼是能…

RFID光触发标签在多行业的应用与效益差异

在当今数字化和智能化的浪潮下&#xff0c;RFID技术已成为众多行业优化运营、提升竞争力的关键手段。RFID光触发标签作为这一技术的创新成果&#xff0c;以其独特的性能特点&#xff0c;正逐渐在各个领域发挥着重要作用。 一、RFID光触发标签的特点与参数 &#xff08;一&…

优惠券秒杀项目

一、添加优惠券的同时&#xff0c;将优惠券信息&#xff0c;以及用户列表放到redis中 Override Transactional public void addSeckillVoucher(Voucher voucher) {// 保存优惠券save(voucher);// 保存秒杀信息SeckillVoucher seckillVoucher new SeckillVoucher();seckillVou…

linux dig域名DNS 查询与iptables域名ip访问流量限制;PTR 反向解析从 IP 地址到域名的映射

一、域名 dns查询 在 Linux 系统中&#xff0c;你可以使用多种工具和技术来进行 DNS 查询和 IP 限制。以下是一些常用的方法和工具&#xff1a; DNS 查询 dig 命令&#xff1a; dig 是一个强大的命令行工具&#xff0c;用于查询 DNS 信息。 dig example.com你可以指定查询类型…

【TCP】核心机制:滑动窗口、流量控制和拥塞控制

文章目录 滑动窗口窗口滑动滑动窗口丢包 流量控制拥塞控制窗口大小变化过程 滑动窗口 有一类算法题&#xff0c;就是通过滑动窗口的思想来解决的&#xff0c;算法中的“滑动窗口”借鉴自 TCP 的滑动窗口 TCP 是要保证可靠传输的>代价&#xff0c;降低了传输的效率&#xf…

【机器学习】3. 欧式距离,曼哈顿距离,Minkowski距离,加权欧式距离

Euclidean - L2 norm L2范数 D ( A , B ) ( a 1 − b 1 ) 2 ( a 2 − b 2 ) 2 . . . D(A,B) \sqrt{(a_1-b_1)^2(a_2-b_2)^2 ...} D(A,B)(a1​−b1​)2(a2​−b2​)2... ​ Manhattan D ( A , B ) ∣ a 1 − b 1 ∣ ∣ a 2 − b 2 ∣ . . . D(A,B) \sqrt{|a_1-b_1||a_…

全网最简单的Java设计模式【九】策略模式-实战中最常用的设计模式之一

策略模式是一种行为设计模式&#xff0c;它允许你定义一系列的算法&#xff0c;把它们一个个封装起来&#xff0c;并且使它们可以相互替换。该模式让算法的变化独立于使用算法的客户。在实际开发中&#xff0c;策略模式可以帮助我们减少大量的 if-else 或 switch 条件判断语句&…

产品的需求分析

一、需求 1.需求概念 用户的预期与现实存在在差异 用户所期望的明确的解决方案 2.需求的常用形式 提问题 提目的 提方案 3.需求的来源 外部需求&#xff1a;用户、市场、其他竞品 内部需求&#xff1a;业务部门、产品经理 4.需求测试方法 定性方式&#xff1a;逻辑…

【生日视频制作】江边夜景游轮观光船霓虹灯AE模板修改文字软件生成器教程特效素材【AE模板】

游轮观光船生日视频制作教程AE模板修改文字特效软件生成器素材 怎么如何做的【生日视频制作】江边夜景游轮观光船霓虹灯AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频

鸿蒙(API 12 Beta3版)【使用Image完成图片接收器】图片开发指导依赖JS对象

图像接收类&#xff0c;用于获取组件surface id&#xff0c;接收最新的图片和读取下一张图片&#xff0c;以及释放ImageReceiver实例。 开发步骤 添加依赖 在进行应用开发之前&#xff0c;开发者需要打开native工程的src/main/cpp/CMakeLists.txt&#xff0c;在target_link_…

【Qt】Qt系统 | Qt事件| 鼠标事件

文章目录 鼠标事件鼠标点击事件鼠标释放事件鼠标双击事件鼠标移动事件 滚轮事件 在 Qt 中&#xff0c;鼠标事件是用 QMouseEvent 实现的。当在窗口中按下鼠标或者移动鼠标时&#xff0c;都会产生鼠标事件 鼠标事件 鼠标点击事件 鼠标按下时通过 虚函数 mousePressEvent() 来…

系统编程—进程

一、进程的概念 1.程序与进程的区别 程序:编译后产生的&#xff0c;格式为ELF的&#xff0c;存储于硬盘的文件。可以通过 readelf -s [文件名] 查看文件信息 …

使用OpenRewrite升级SpringBoot项目

使用OpenRewrite升级SpringBoot项目 什么是OpenRewrite? OpenRewrite是一个强大的开源自动化源代码重构工具,专为大规模代码库设计。它的核心理念是通过程序化的方式来改变源代码,而不是依赖于手动编辑或简单的查找替换。 OpenRewrite的主要特点和优势包括: 自动重构: Open…