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.总结
通过这篇文章,我相信大家已经掌握了这个小小的变量操作,看起来很繁琐,事实上确实挺繁琐,不过不要气馁,还是有章法可循得。
以下内容是需要反复记忆和练习得:
- 理解并记忆变量赋值的含义
- 练习并记忆变量的命名规则,练和记相辅相成
- 变量赋值的姿势多种多样,但是基本赋值、多重赋值、交叉赋值是必须要掌握,其他变量赋值也重要,目前只作为了解,饭要一口一口吃。
补充一点:学习一个新知识,我们知道概念才是学习的核心和思考的核心。除了清晰准确的记忆和理解定义,还需要知道集合概念,集合概念类似于变量赋值的多样性,这个时候我们就需要做分类、比较、应用,这么多种变量赋值方式告诉我们什么,编程最核心的目的是传达感知,也就是求一个变量值,但是每个人的想法和表达的方式都不一样,我们现在在做得就是学习他们更高级的思考方式和表达方式,也许这就是编程学习的乐趣。
头发秃了不要紧最主要是武装我们的头脑。
当你读到这里时,说明你是一个认真学习的同学,如果对你有很大帮助,欢迎点赞、关注、赞赏!
未完待续,持续更新中…