【python系列】python之变量赋值操作

1.前言

变量是什么?我们学任何什么东西,都要从定义入手,只有清晰且无歧义的定义,才能真正理解这个概念是什么意思。
维基百科的定义:

在数学、物理学中,变量(variable)又称变数,是表达式或公式中,没有固定的值而可以变动的数或量;该数或量可以是随意的,也可能是未指定或未定的。——Wikipedia

从字面意思理解就是变数,它是一个动词,也可以理解成我们脑海里每一个念头,也就是七情六欲。
从大脑的角度来理解,就是什么跟什么,用符号来表示就是:?=?
表达形式就是,等号 = 左边是一个变量名,等号 = 右边是存储在变量中的值。

既然你知道了什么是变量及变量的表达形式,这里边又涉及到两个问题,变量名和变量值是不是可以随便写,人的脑子可以随便想,那是你的自由,就像美国有八十多个性别,但是你别当回事啊,当回事那不乱套了。所以计算机不能这么胡来,计算机是模拟人脑的一个工具,一定是从无序到有序的这样一个过程,那么变量名和变量值都有哪些要求得。

2.变量命名规则和要求

在 Python 中,变量名 和 变量值 都有一定的命名规则和要求。变量名代表了存储数据的标识符,而变量值则是你赋给变量的实际数据。

2.1 变量名的要求

变量名是用来标识数据的名称,它遵循一些特定的规则和约定。Python 对变量名有以下要求:

2.1.1 变量名必须以字母或下划线(_)开头
  • 变量名可以包含字母(a-z 和 A-Z)、数字(0-9)和下划线(_),但它不能以数字开头。
my_var = 10    # 有效
var_1 = 20     # 有效
1var = 30      # 无效,不能以数字开头
2.1.1.2 变量名只能包含字母、数字和下划线
  • 除了字母、数字和下划线外,不能使用其他特殊符号,如空格、连字符(-)、点号(.)、感叹号(!)等。
my_var = 10      # 有效
my-var = 10      # 无效,不能使用连字符
my.var = 10      # 无效,不能使用点
2.1.1.3 大小写敏感
  • Python 是区分大小写的,也就是说,myVar 和 myvar 被视为两个不同的变量。
myVar = 10
myvar = 20
print(myVar)  # 输出 10
print(myvar)  # 输出 20
2.1.1.4 不能使用 Python 保留字
  • Python 具有一组 保留字(关键字),这些是 Python 的语法元素,不能作为变量名使用。可以通过 keyword 模块查看所有的保留字。
import keyword
print(keyword.kwlist)  # 打印所有关键字

示例:if, for, while, class 等是保留字,不能作为变量名。

2.1.1.5 有意义的命名
  • 尽管这不是严格的规则,但 Python 强烈建议使用有意义的、能描述变量内容的名称。这有助于代码的可读性和可维护性。

例如:

age = 25       # 比 x = 25 更具可读性
total_price = 100.50

2.2. 特殊字符和变量名

Python 不允许在变量名中使用许多特殊字符(如 !, @, #, $, % 等),但有以下两种情况可以使用特殊符号:

2.2.2.1 下划线 _
  • 下划线是唯一可以在变量名中使用的特殊符号。它在 Python 中有特殊意义,用于表示 “私有” 变量(如 _my_var),或者用于分隔词(如 my_variable)。

  • 单下划线 _ 作为变量名的前缀,通常用于表示该变量是内部使用的(私有变量),虽然它不是真正的私有。

  • 双下划线 __ 作为变量名的前缀,Python 会进行名称改写(name mangling),例如 __my_var。

_my_var = 10   # 以单下划线开始,表示“私有”变量
my_var_2 = 20  # 有效的变量名
2.2.2.2 双下划线 __
  • 双下划线前缀(如 __var)用于类中的私有成员变量,但它也有一个特殊的用途:名称改写(name mangling),Python 会改变变量的名称以避免与子类的同名属性冲突。
class MyClass:
    def __init__(self):
        self.__private_var = 10  # 双下划线表示私有变量

obj = MyClass()
print(obj.__private_var)  # 会抛出 AttributeError

使用 __ 前缀并不会使变量真正私有,只是改变了变量的名称,例如:_MyClass__private_var,这样做的目的是防止子类覆盖父类的私有变量。

2.2.3. 变量值的要求

变量值是你赋给变量的实际数据,可以是 Python 中的任何数据类型,如数字、字符串、列表、字典等。变量值没有严格的格式要求,但是应符合其数据类型的规范:

  • 数字类型:可以是整数、浮点数或复数。
x = 10           # 整数
y = 3.14         # 浮点数
z = 2 + 3j       # 复数
  • 字符串类型:可以是单引号或双引号括起来的文本。
s1 = "Hello"
s2 = 'World'
  • 集合类型:可以是列表、元组、集合等。
lst = [1, 2, 3]    # 列表
tup = (1, 2, 3)    # 元组
  • 布尔值:True 或 False。
flag = True
  • 字典类型:键值对的集合。
my_dict = {"name": "Alice", "age": 25}

2.4. 变量命名的最佳实践

  • 除了遵守语法规则外,Python 中也有一些关于变量命名的最佳实践:

使用 小写字母和下划线(snake_case)来命名变量。

total_price = 100
first_name = "John"
  • 避免使用与 Python 内建函数、类或模块同名的变量名,如 list, str, int 等。

  • 使用有意义的变量名,能表达变量的作用和内容。

2.5. 总结
  • 变量名要求:必须以字母或下划线开头,可以包含字母、数字和下划线,不能包含其他特殊符号,且区分大小写。
  • 特殊符号:Python 只允许使用下划线作为合法的特殊符号。
  • 变量值:可以是任何合法的 Python 数据类型,如整数、浮点数、字符串、列表、字典等。

3.变量赋值不同的写法和方式

在 Python 中,变量赋值有多种不同的写法和方式,根据需求和代码风格可以选择不同的赋值方式。针对初学者,前三种赋值方式必须要掌握,后面几种赋值方式只作为了解。以下是一些常见的变量赋值写法:

3.1. 基本赋值

最简单的赋值方式是将一个值赋给一个变量:

x = 10
name = "Alice"

3.2. 多重赋值

Python 允许一次赋值多个变量,可以使用逗号分隔:

x, y, z = 1, 2, 3

这会将 x 赋值为 1,y 赋值为 2,z 赋值为 3。

3.3. 交换变量值

Python 允许通过多重赋值轻松交换两个变量的值:

x, y = y, x  # 交换 x 和 y 的值

3.4. 默认值赋值

如果变量没有初始化,使用 = 进行普通赋值。如果想要为变量提供默认值,可以使用如下方式:

x = x if x is not None else 10  # 若 x 为 None,则赋值为 10

3.5. 扩展解包赋值

Python 允许对可迭代对象进行解包并赋值到多个变量中,支持收集剩余部分到列表或元组中:

a, *b, c = [1, 2, 3, 4, 5]
# a = 1, b = [2, 3, 4], c = 5

这种方法可以将中间的多个元素收集到 b 列表中。

3.6. 列表推导式赋值

可以通过列表推导式或生成器表达式来动态生成并赋值:

x = [i**2 for i in range(5)]  # x = [0, 1, 4, 9, 16]

3.7. 字典赋值

字典赋值可以使用键值对的方式,直接给字典中的某个键赋值:

my_dict = {}
my_dict["name"] = "Alice"
my_dict["age"] = 30

3.8. or 赋值(常用于给变量设置默认值)

可以使用 or 进行赋值,这样当变量为 None、False、0 或其他空值时,会使用右侧的默认值:

x = x or 10  # 如果 x 为假值(例如 None 或 0),就赋值为 10

3.9. += 增量赋值

Python 支持通过增量操作符进行赋值,这是一种简洁的表达式:

x = 10
x += 5  # 相当于 x = x + 5,x 现在是 15

3.10. * 运算符赋值(解包赋值)

在函数参数传递时,你也可以使用 * 来解包并进行赋值:

def func(*args):
    a, b, *rest = args
    print(a, b, rest)

func(1, 2, 3, 4)  # 输出: 1 2 [3, 4]

3.11. 字典解包赋值

Python 3.5+ 允许字典解包,简化字典的合并操作:

dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3}
merged_dict = {**dict1, **dict2}  # 合并两个字典

3.12. lambda 表达式赋值

可以将 lambda 表达式赋值给变量,用于创建匿名函数:

square = lambda x: x**2
print(square(5))  # 输出: 25

3.13. 类型注解赋值

Python 3.5+ 引入了类型注解,可以在变量赋值时指定类型:

x: int = 10
name: str = "Alice"

3.14. 常量赋值

Python 中没有常量的概念,但有些开发者使用全大写的变量名作为常量标志,表示这些值不应该被修改:

PI = 3.14159  # 常量赋值

3.15. global 和 nonlocal 赋值

在函数或作用域内,global 和 nonlocal 可以用来访问和修改外部作用域(如全局变量或闭包变量)的变量:

x = 10

def func():
    global x
    x = 20  # 修改全局变量 x
    print(x)

func()  # 输出 20

def outer():
    x = 10

    def inner():
        nonlocal x
        x = 20  # 修改外层函数的变量 x
        print(x)

    inner()

outer()  # 输出 20

Python 提供了多种不同的变量赋值方式,支持基本赋值、多重赋值、解包赋值等多种灵活方式。在日常编程中,可以根据具体的需求选择最合适的赋值写法,保持代码简洁和可读性。

4.总结

通过这篇文章,我相信大家已经掌握了这个小小的变量操作,看起来很繁琐,事实上确实挺繁琐,不过不要气馁,还是有章法可循得。
以下内容是需要反复记忆和练习得:

  • 理解并记忆变量赋值的含义
  • 练习并记忆变量的命名规则,练和记相辅相成
  • 变量赋值的姿势多种多样,但是基本赋值、多重赋值、交叉赋值是必须要掌握,其他变量赋值也重要,目前只作为了解,饭要一口一口吃。

补充一点:学习一个新知识,我们知道概念才是学习的核心和思考的核心。除了清晰准确的记忆和理解定义,还需要知道集合概念,集合概念类似于变量赋值的多样性,这个时候我们就需要做分类、比较、应用,这么多种变量赋值方式告诉我们什么,编程最核心的目的是传达感知,也就是求一个变量值,但是每个人的想法和表达的方式都不一样,我们现在在做得就是学习他们更高级的思考方式和表达方式,也许这就是编程学习的乐趣。

头发秃了不要紧最主要是武装我们的头脑。

当你读到这里时,说明你是一个认真学习的同学,如果对你有很大帮助,欢迎点赞、关注、赞赏!

未完待续,持续更新中…

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV视觉分析之目标跟踪(11)计算两个图像之间的最佳变换矩阵函数findTransformECC的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 根据 ECC 标准 78找到两幅图像之间的几何变换(warp)。 该函数根据 ECC 标准 ([78]) 估计最优变换(warpMatri…

彻底解决单片机BootLoader升级程序失败问题

文章目录 1、引言2、MicroBoot:优雅的解决升级问题问题1:bootloader 在跳转到app前没有清理干净存在的痕迹问题2: 需要 APP 传递信息给 Bootloader问题3: APP单独运行没有问题,通过Bootloader跳转到APP运行莫名死机问题…

v-html 富文本中图片使用element-ui image-viewer组件实现预览,并且阻止滚动条

效果 导入组件 import ElImageViewer from "element-ui/packages/image/src/image-viewer"; components:{ ElImageViewer },模板使用组件 <el-image-viewerv-if"isShowPics":on-close"closeViewer":url-list"srcList"/>定义两…

山寨一个Catch2的SECTION

Catch2 是一个 C 单元测试库&#xff0c;吹嘘自己比 NUnit 和 xUnit 还要高明&#xff0c; 支持在 TEST_CASE() 中的多个 SECTION&#xff0c; 意思是说 SECTION 外头的代码相当于setup 和 teardown&#xff0c;section 内部则被认为是实际的 test case&#xff0c; 这种写法可…

深入剖析【C++继承】:单一继承与多重继承的策略与实践,解锁代码复用和多态的编程精髓,迈向高级C++编程之旅

​​​​​​​ &#x1f31f;个人主页&#xff1a;落叶 &#x1f31f;当前专栏: C专栏 目录 继承的概念及定义 继承的概念 继承定义 定义格式 继承基类成员访问⽅式的变化 继承类模板 基类和派⽣类间的转换 继承中的作⽤域 隐藏规则 成员函数的隐藏 考察继承【作⽤…

36.Redis核心设计原理

本文针对前面的讲解做一次总结 1.Redis基本特性 1.非关系型的键值对数据库&#xff0c;可以根据键以O(1)的时间复杂度取出或插入关联值 2.Redis的数据是存在内存中的 3.键值对中键的类型可以是字符串&#xff0c;整型&#xff0c;浮点型等&#xff0c;且键是唯一的 4.键值对中…

项目模块十七:HttpServer模块

一、项目模块设计思路 目的&#xff1a;实现HTTP服务器搭建 思想&#xff1a;设计请求路由表&#xff0c;记录请求方法与对应业务的处理函数映射关系。用户实现请求方法和处理函数添加到路由表&#xff0c;服务器只接受请求并调用用户的处理函数即可。 处理流程&#xff1a; …

vue项目npm run serve出现【- Network: unavailable】(从排查到放弃)

1. 问题现象 环境&#xff1a; 系统&#xff1a;win11node&#xff1a;v16.20.2“vue”: “2.6.10” 执行npm run serve启动vue项目&#xff0c;期望&#xff1a; App running at:- Local: http://localhost:9528/ - Network: http://x.x.x.x:9528/实际&#xff1a; App runn…

喜报|超维机器人荣获昇腾AI创新大赛铜奖

近日&#xff0c;在备受瞩目的昇腾AI创新大赛中&#xff0c;超维机器人凭借扎实的技术实力和创新产品&#xff0c;荣获大赛铜奖。这一荣誉不仅展现了超维机器人在智能巡检领域的技术创新与突破&#xff0c;也标志着超维机器人的智能巡检解决方案在人工智能领域获得了广泛认可&a…

编程初学者的第一个 Rust 系统

编程初学者的第一个 Rust 系统 对编程初学者而言&#xff0c;存在一个 “第一个系统” 的问题&#xff0c;如果没有学会第一个系统&#xff0c;编程初学者是学不会编程的。原因是&#xff0c;现实生活里的应用程序都是有一定体量的&#xff0c;不是几十行&#xff0c;几百行的…

单元测试、集成测试、系统测试有什么区别

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 单元测试、集成测试、系统测试有什么区别 1、粒度不同 集成测试bai粒度居中&#xff0c;单元测试粒度最小&#xff0c;系统du测试粒度最大。 2、测试方式不同…

Java面试要点16 - 面向对象基础:类与对象

本文目录 一、引言二、类的定义与对象创建三、成员变量与封装四、构造方法五、this关键字六、静态成员七、总结 一、引言 面向对象编程是Java的核心特性之一&#xff0c;它通过类和对象的概念来组织和管理代码&#xff0c;使代码更加模块化、可复用和易于维护。本文将深入探讨…

【免越狱】iOS砸壳 可下载AppStore任意版本 旧版本IPA下载

软件介绍 下载iOS旧版应用&#xff0c;简化繁琐的抓包流程。 一键生成去更新IPA&#xff08;手机安装后&#xff0c;去除App Store的更新检测&#xff09;。 软件界面 支持系统 Windows 10/Windows 8/Windows 7&#xff08;由于使用了Fiddler库&#xff0c;因此需要.Net环境…

LeetCode 热题100 之 多维动态规划

1.不同路径 思路分析&#xff1a;动规五部曲 dp数组定义&#xff1a;dp[i][j]表示从起点&#xff08;0&#xff0c;0&#xff09;到位置(i,j)的路径数量递推公式&#xff1a;dp[i][j] dp[i-1][j] dp[i][j-1] 从 (i-1, j) 位置到 (i, j) 需要走一步向下的路径。从 (i, j-1) 位…

文件操作(3)

前言&#xff0c;在上篇博客介绍了如何正确的打开一个文件和关闭一个文件&#xff0c;今天我们来学习如何在文件中输出和输入数据。 对文件数据的读写可以分为顺序读写和随机读写。顺序读写&#xff0c;即挨着顺序对文件中的数据进行输入或输出。 在这片博客中&#xff0c;我们…

Openstack7--安装消息队列服务RabbitMQ

只需要在控制节点安装 安装RabbitMQ yum -y install rabbitmq-server 启动RabbitMQ并设置开机自启 systemctl start rabbitmq-server;systemctl enable rabbitmq-server 创建 rabbitmq 用户 并设置密码为 000000 rabbitmqctl add_user rabbitmq 000000 如果你不慎创错了…

Unity图形学之Shader2.0 模板测试

1.模版测试&#xff1a;符合条件的 通过 不符合条件的 像素 丢弃 比较公式&#xff1a; if&#xff08;&#xff08;referenceValue&readMask&#xff09; comparisonFunction &#xff08;stencilBufferValue&readMask&#xff09;&#xff09; 通过像素 else 抛弃…

020_Servlet_Mysql学生选课系统(新版)_lwplus87

摘 要 随着在校大学生人数的不断增加&#xff0c;教务系统的数据量也不断的上涨。针对学生选课这一环节&#xff0c;本系统从学生网上自主选课以及课程发布两个大方面进行了设计&#xff0c;基本实现了学生的在线信息查询、选课功能以及教师对课程信息发布的管理等功能&…

SpringBoot教程(二十五) | SpringBoot配置多个数据源

SpringBoot教程&#xff08;二十五&#xff09; | SpringBoot配置多个数据源 前言方式一&#xff1a;使用dynamic-datasource-spring-boot-starter引入maven依赖配置数据源动态切换数据源实战 方式二&#xff1a;使用AbstractRoutingDataSource1. 创建数据源枚举类2. 创建数据源…

Python 正则表达式进阶用法:分组与引用详解

Python 正则表达式进阶用法&#xff1a;分组与引用详解 正则表达式是一种用于字符串匹配和处理的强大工具。它不仅能识别简单的文本模式&#xff0c;还能通过更高级的特性来完成复杂的文本处理任务。本文将深入探讨 Python 正则表达式中的“分组”和“引用”——两个在高级匹配…