python3基础语法梳理(一)

前沿

Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。
注意 官方宣布,2020 年 1 月 1 日, 停止 Python 2 的更新。

所以这次整理 以python3最新的版本和特性为主

Python3安装

python3安装比较简单,略过 如果有需要看这个博客

版本选择 3.13版本

这里我选择了windows嵌入式安装包 解压就可以直接用


Python3 基础语法

标识符规则

第一个字符必须以字母(a-z, A-Z)或下划线 _ 。

标识符的其他的部分由字母、数字和下划线组成。

标识符对大小写敏感,count 和 Count 是不同的标识符。

标识符对长度无硬性限制,但建议保持简洁(一般不超过 20 个字符)。

禁止使用保留关键字,如 if、for、class 等不能作为标识符。

注意 Python 3 允许使用 Unicode 字符作为标识符,可以用中文作为变量名,非 ASCII 标识符也是允许的了。

python 复制代码
>>> π = 3.14159   # 合法
>>> π
3.14159
>>> 姓名 = "张三"  # 合法
>>> 姓名
'张三'


python3保留字

python 复制代码
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', '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']
类别 关键字 说明
逻辑值 True 布尔真值
False 布尔假值
None 表示空值或无值
逻辑运算 and 逻辑与运算
or 逻辑或运算
not 逻辑非运算
条件控制 if 条件判断语句
elif 否则如果(else if 的缩写)
else 否则分支
循环控制 for 迭代循环
while 条件循环
break 跳出循环
continue 跳过当前循环的剩余部分,进入下一次迭代
异常处理 try 尝试执行代码块
except 捕获异常
finally 无论是否发生异常都会执行的代码块
raise 抛出异常
函数定义 def 定义函数
return 从函数返回值
lambda 创建匿名函数
类与对象 class 定义类
del 删除对象引用
模块导入 import 导入模块
from 从模块导入特定部分
as 为导入的模块或对象创建别名
作用域 global 声明全局变量
nonlocal 声明非局部变量(用于嵌套函数)
异步编程 async 声明异步函数
await 等待异步操作完成
其他 assert 断言,用于测试条件是否为真
in 检查成员关系
is 检查对象身份(是否是同一个对象)
pass 空语句,用于占位
with 上下文管理器,用于资源管理
yield 从生成器函数返回值

检测标识符是否合法

python 复制代码
>>> def is_valid_identifier(name):
...     try:
...         exec(f"{name} = None")
...         return True
...     except:                                                                                                                     ...          return False
...
>>> print(is_valid_identifier("2var"))  # False
False
>>> print(is_valid_identifier("var2"))  # True

python3常见数据类型

类别 数据类型 描述 示例
数字类型 int 整数(不限大小) a = 42
float 浮点数(带小数) b = 3.14
complex 复数(实部 + 虚部) c = 2 + 3j
文本类型 str 字符串(文本序列) s = "Hello"
布尔类型 bool 逻辑值(True/False) flag = True
空类型 NoneType 表示无数据 x = None
序列类型 list 可变有序序列 lst = [1, "a", True]
tuple 不可变有序序列 tup = (1, "a", True)
range 不可变的数字序列(常用于循环) r = range(5)
映射类型 dict 键值对集合(无序) d = {"name": "Alice", "age": 25}
集合类型 set 无序不重复元素集合 s = {1, 2, 3}
frozenset 不可变的 set fs = frozenset([1, 2, 3])
二进制类型 bytes 不可变字节序列(0-255) b = b"hello"
bytearray 可变字节序列 ba = bytearray(b"hello")
memoryview 内存视图(直接访问二进制数据) mv = memoryview(b"hello")

注意:
python3没有单独的字符类型,一个字符就是长度为1的字符串。
Python3 中,bool 是 int 的子类,True 和 False 可以和数字相加, True==1、False==0 会返回 True,但可以通过 is 来判断类型。

可变 vs 不可变

可变类型:listdictsetbytearray(可修改内容)。

不可变类型:intfloatstrtuplefrozensetbytes(创建后不能修改)。
特殊类型
range:常用于循环(如 for i in range(10))。
NoneType:表示空值,通常用于初始化变量。

类型检查

使用type()isinstance()判断数据类型:

isinstance 和 type 的区别在于:

  • type()不会认为子类是一种父类类型。
  • isinstance()会认为子类是一种父类类型。

示例一

python 复制代码
print(type(10))         # <class 'int'>
print(isinstance([], list))  # True
>>> class A:
...     pass
... 
>>> class B(A):
...     pass
... 
>>> isinstance(A(), A)
True
>>> type(A()) == A 
True
>>> isinstance(B(), A)
True
>>> type(B()) == A
False
>>> issubclass(bool, int) 
True
>>> True==1
True
>>> False==0
True
>>> True+1
2
>>> False+1
1
>>> 1 is True
<python-input-12>:1: SyntaxWarning: "is" with 'int' literal. Did you mean "=="?
  1 is True
False
>>> 0 is False
<python-input-13>:1: SyntaxWarning: "is" with 'int' literal. Did you mean "=="?
  0 is False
False

什么会出现 SyntaxWarning?

Python 检测到你在用 is 比较一个字面量整数(如 1)和 True,这通常是代码错误(因为 is 比较的是身份,而不是值)。

Python 建议你使用 == 来比较值是否相等,除非你确实想检查是否是同一个对象。

在 Python2 中是没有布尔型的,它用数字 0 表示 False,用 1 表示 True。

不可变类型(Immutable)的底层逻辑

  1. 示例代码
python 复制代码
a = 10  # 创建一个整数对象 10,变量 a 指向它
a = 11  # 创建一个新整数对象 11,变量 a 改为指向它
  1. 内存中的行为

    执行 a = 10 时:

    Python 在内存中创建整数对象 10,变量 a 是其引用(类似"标签")。

    执行 a = 11 时:

    并非修改 10 这个对象,而是新建一个对象 11,并让 a 指向新对象。

    原来的 10 依然存在于内存中(如果没有其他引用,会被垃圾回收)。

  2. 验证方法

    id() 查看对象的内存地址变化:

python 复制代码
>>> a = 10
>>> print(id(a))
140724023542984
>>> a = 11
>>> print(id(a))
140724023543016
>>>

对比可变类型(Mutable)的修改

以列表 list 为例:

python 复制代码
>>> lst = [1, 2, 3]
>>> print(id(lst))
1858069687616
>>> lst[0] = 99
>>> print(id(lst))
1858069687616
>>>
  • 可变类型(如 list、dict)支持原地修改,对象的内存地址不变。

为什么说整数是不可变的?

因为整数对象 10 或 11 在内存中创建后:

  • 你无法通过任何操作改变 10 这个对象的值(例如让它变成 11)。
  • 所有看似"修改"的操作(如 a = a + 1)本质是创建新对象并重新绑定变量。

为什么设计不可变类型?

  • 安全性:避免意外修改(例如字典的键必须用不可变类型)。
  • 性能优化:小整数(如 -5 到 256)在 Python 启动时已缓存,重复使用同一对象。
  • 哈希支持:不可变对象可哈希(hash(10) 有效,hash([1,2]) 会报错)

注释
单行注释

Python中单行注释以 # 开头,实例如下:

python 复制代码
>>> #!/usr/bin/python3
>>>
>>> # 第一个注释
>>> print ("Hello, Python!") # 第二个注释
Hello, Python!
>>>

多行注释

python 复制代码
#!/usr/bin/python3
 
# 第一个注释
# 第二个注释
 
'''
第三注释
第四注释
'''
 
"""
第五注释
第六注释
"""
print ("Hello, Python!")

行与缩进
python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。
缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。

python 复制代码
if True:
    print ("True")
else:
    print ("False")

多行语句

Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠 \ 来实现多行语句

python 复制代码
>>> item_one='N'
>>> item_two='B'
>>> item_three='C'
>>> total = item_one+\
... item_two+\
... item_three
>>>
>>> total
'NBC'
>>>      

类型运算总结

Number(数字)
注意:
1、Python可以同时为多个变量赋值,如a, b = 1, 2。
2、一个变量可以通过赋值指向不同类型的对象。
3、数值的除法包含两个运算符:/ 返回一个浮点数,// 返回一个整数。
4、在混合计算时,Python会把整型转换成为浮点数。

String(字符串)
注意:
1、反斜杠可以用来转义,使用r可以让反斜杠不发生转义。
2、字符串可以用+运算符连接在一起,用*运算符重复。
3、Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。
4、Python中的字符串不能改变。

bool(布尔类型)
注意: 在 Python 中,所有非零的数字和非空的字符串、列表、元组等数据类型都被视为 True,只有 0、空字符串、空列表、空元组等被视为 False。因此,在进行布尔类型转换时,需要注意数据类型的真假性。

Tuple(元组)
注意:
1、与字符串一样,元组的元素不能修改。
2、元组也可以被索引和切片,方法一样。
3、注意构造包含 0 或 1 个元素的元组的特殊语法规则。
4、元组也可以使用 + 操作符进行拼接。

Set(集合)
注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

Dictionary(字典)
注意:
1、字典是一种映射类型,它的元素是键值对。
2、字典的关键字必须为不可变类型,且不能重复。
3、创建空字典使用 { }。

bytes 类型
bytes 类型中的元素是整数值,因此在进行比较操作时需要使用相应的整数值。

相关推荐
一粒沙白猫5 分钟前
Java综合练习04
java·开发语言·算法
哎呦你好9 分钟前
【CSS】Grid 布局基础知识及实例展示
开发语言·前端·css·css3
一入JAVA毁终身21 分钟前
处理Lombok的一个小BUG
java·开发语言·bug
费弗里28 分钟前
Python全栈应用开发利器Dash 3.x新版本介绍(2)
python·dash
Hellyc43 分钟前
JAVA八股文:异常有哪些种类,可以举几个例子吗?Throwable类有哪些常见方法?
java·开发语言
吴佳浩1 小时前
Python入门指南-AI番外-MCP完整教程:从零开始学会Model Context Protocol
人工智能·python·mcp
加油吧zkf1 小时前
目标检测新纪元:DETR到Mamba实战解析
图像处理·人工智能·python·目标检测·分类
2301_803554521 小时前
c++中的绑定器
开发语言·c++·算法
海棠蚀omo1 小时前
C++笔记-位图和布隆过滤器
开发语言·c++·笔记
杰哥技术分享1 小时前
Yii2 安装-yii2-imagine
开发语言·yii