Python基础03 | 变量和函数

修订历史:

  • 2024/09/21 初稿

变量

"Variables are containers for storing data values. "^[1]

"A Python variable is a name given to a memory location." ^[2]

A Python variable is a symbolic name that is a reference or pointer to an object. ^[3]

简单理解,变量就是一个符号名字,它引用或指向了内存中的某个位置或者说某个对象。

创建变量

Python 没有命令来声明变量。变量在你首次为它分配值的那一刻创建。

变量命名规则

  • 必须以字母或下划线(_)开头
  • 命名可由字母、数字和下划线组成
  • 大小写敏感
  • 尽量避免使用保留字命名

补充

  1. 3.9 版本的 python 保留字共有 36 个。
Python Keywords
False def if raise
None del import return
True elif in try
and else is while
as except lambda with
assert finally nonlocal yield
break for not __peg__parser
class from or **async **
continue global pass await
  1. 查看 python 保留字的方法
python 复制代码
Python 3.9.6 (default, Feb  3 2024, 15:58:27)
[Clang 15.0.0 (clang-1500.3.9.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', '__peg_parser__', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
>>> len(keyword.kwlist)
36
>>> del = 37 # 如果创建与保留字同名的变量,会导致错误
  File "<stdin>", line 1
    del = 37
        ^
SyntaxError: invalid syntax
>>>

python 的特殊变量赋值

相比其他编程语言,比如 CC++Python 支持链式赋值和多变量赋值

python 复制代码
# 链式赋值
>>> a = b = c = 60
>>> print(a, b, c)
60 60 60

# 通过元组方式进行多变量赋值
>>> a, b, c = 31, 34, 50
>>> print(a, b, c)
31 34 50

深入理解 Python 中的变量

在前面 Python 的定义中,我们指出 Python 是引用或指向某个对象的符号名称。

实际上,在Python中,当你给变量赋值时,你实际上是在创建一个对象,并将变量指向这个对象。且每个创建的对象都会被赋予一个独一无二的数字来标识它。这个数字保证了在对象生命周期重叠的任何时期,不会有两个对象拥有相同的标识符。一旦对象的引用计数降至零,并且它被垃圾回收。

Python内置的id()函数返回对象的整数标识符。使用id()函数,你可以验证两个变量是否确实指向同一个对象。

python 复制代码
>>> a = 988
>>> b = a
>>> id(a)
4300386864
>>> id(b)
4300386864

变量可以指向(或引用)内存中的一个对象。当一个变量被赋值为另一个变量时,新变量将指向同一个对象。上面的示例说明了变量赋值和对象引用在编程中是如何工作的,以及如何通过内存地址来验证变量是否指向相同的对象。

备注^[4]

  • Python 解释器会根据整数的范围采取不同的优化策略。对于-5到256之间的整数,Python会预先创建对象并在需要时重用,这样可以提高效率并减少内存占用。这意味着,当你给不同的变量赋值为 <math xmlns="http://www.w3.org/1998/Math/MathML"> [ − 5 , 256 ] [-5, 256] </math>[−5,256] 这个范围内的整数时,它们实际上会指向同一个对象。如果给变量赋的值不在该范围内,他们则会指向不同的对象。
  • 多变量赋值采取了与单变量赋值不一样的策略;
python 复制代码
>>> a, b = 988, 988
>>> id(a), id(b)
(4300389296, 4300389296)

>>> a = 988
>>> b = 988
>>> id(a)
4300387472
>>> id(b)
4300388880

>>> a, b = 98, 98
>>> id(a), id(b)
(4298364304, 4298364304)

>>> a = 98
>>> b = 98
>>> id(a)
4298364304
>>> id(b)
4298364304

参考资料

  • 1\] [www.w3schools.com/python/pyth...](https://link.juejin.cn?target=https%3A%2F%2Fwww.w3schools.com%2Fpython%2Fpython_variables.asp "https://www.w3schools.com/python/python_variables.asp")

  • 3\] [realpython.com/python-vari...](https://link.juejin.cn?target=https%3A%2F%2Frealpython.com%2Fpython-variables%2F "https://realpython.com/python-variables/")

相关推荐
测试员周周1 小时前
【Appium 系列】第06节-页面对象实现 — LoginPage 实战
开发语言·前端·人工智能·python·功能测试·appium·测试用例
2301_783848651 小时前
优化文本分类中堆叠模型的网格搜索性能:避免训练卡顿的实战指南
jvm·数据库·python
CLX05052 小时前
如何安装Oracle 12c Cloud Control_OMS服务端组件与Agent部署
jvm·数据库·python
老纪3 小时前
SQL中如何查找特定的空值行:WHERE IS NULL深度解析
jvm·数据库·python
噜噜噜阿鲁~3 小时前
python学习笔记 | 10.0、面向对象编程
笔记·python·学习
weixin199701080163 小时前
[特殊字符] RESTful API 接口规范详解:构建高效、可扩展的 Web 服务(附 Python 源码)
前端·python·restful
2301_781571424 小时前
mysql数据库响应缓慢如何排查_使用EXPLAIN分析执行计划
jvm·数据库·python
彳亍1014 小时前
实现倒计时数字在到达1后自动隐藏(2为最后可见数字),同时继续运行至-1再终止
jvm·数据库·python
X56614 小时前
CSS如何处理SSR中CSS引入_在服务端渲染时提取关键CSS
jvm·数据库·python
duke8692672145 小时前
PostgreSQL 中高效插入多对多关联数据的三种方案对比与最佳实践
jvm·数据库·python