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

2024-08-24 00:36

本文主要是介绍Python青少年简明教程:赋值语句,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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))  # 输出相同的IDa = 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  # 这是合法的,但违反了常量约定

这篇关于Python青少年简明教程:赋值语句的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100943

相关文章

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、