---
aliases: []
tags:
- python
- syntax
created: 2025-08-03 04:08:51
modified: 2025-12-09 20:58:45
---
# Python 语法笔记
---
## 基础语法
### 变量表达式
#### 变量名规则
* 变量名只能包含字母、数字和下划线。不能以数字开头。
* 不能包含空格
* 不要用 Python 关键字和函数名或保留字作变量名
> [!tip]
>
>慎用小写字母**l**和大写字母**O**,因为可能与数字**1**和**0**混淆。
### 简单数据类型
Python3 中有 6 个标准数据类型:
* [数值](#syntax_basic_type_number)
* [字符串](#syntax_basic_type_string)
* [列表](#syntax_type_list)
* [元组](#syntax_type_tuple)
* [集合](#syntax_type_set)
* [字典](#syntax_type_dictionary)
> [!info]
>
> 不可变数据: [数值](#syntax_basic_type_number)、[字符串](#syntax_basic_type_string) 和 [元组](#syntax_type_tuple)
>
> 可变数据:[列表](#syntax_type_list)、[集合](#syntax_type_set) 和 [字典](#syntax_type_dictionary)
#### 数值类型
##### 整型
##### 浮点型
##### 复数
#### 字符串
##### 表达方式
Python 中字符串有几种表达方式,可以使用单引号 `'`、双引号 `"` 或三引号(`"""` 或 `'''`)。
##### 字符串索引
Python 字符串索引与 [C](../C/C_Note.md)、[Java](../Java/Java_Note.md) 从**0**开始。
##### 字符串格式化
###### format 方法
### 复合数据类型
#### 列表
列表定义:
```python
a = [1,3,4]
```
Python 的列表类型特点:
1. 元素**可重复**
2. 元素排列**有序**
> [!tip]
>
> Python 的列表相当于 [Java](../Java/Java_Note.md) 中的 [数组](../Java/Java_Base_Note.md#数组)
#### 元组
元组与 [列表](#列表) 类似,但元组是「**只读**」的。其由一系列特定顺序排列的元素组成,不同在于元组一旦创建其**元素不能被修改**,算是一种「特殊的」列表,又称为「不可变列表」。
> [!info]
>
> 元组类似于 [Java](../Java/Java_Note.md) 中的 [数组](../Java/Java_Base_Note.md#数组),但比数组还要「呆板」,Java 的数组只是数组这个容器大小,即数组的长度创建后不可变(因为数组是一块连续的内存,一旦分配了就无法更改),但数组中的元素是可以通过数组索引赋值的方式来修改的。而元组是完全不能对某个元素进行单独修改操作。
##### 创建元组
###### 通用创建语法
创建元组组,使用圆括号 `()`,元素间用逗号 `,` 区隔。圆括号 `()` 不是必需的,是**可省略**,当输出元组组时,Python 会自动加上一对圆括号。
语法:`变量名=(元素1,元素2,元素3,...,元素n)`
特殊语法
如果不向圆括号 `()` 传入任何元素,那么会创建一个空元组。
如果元组只包括**1**个元素,则需要在元素后面加逗号,否则圆括号会被当作运算符使用。
示例:
```python
t1=(1,3,6,8,10)
# 省略圆括号
t2=2,"hello",3.5
# 空元组
t3=()
# 只包括1个元素
t4=(8,)
# 或者省略括号,不过有点丑陋
t5=8,
```
###### 使用 `tuple` 函数创建
`tuple` 函数能够将其他数据结构对象转换成元组类型。其类型可以是 range 对象、[字符串](#syntax_basic_string)、元组或其他可迭代类型数据。
示例:
```python
tuple(range(5,15,2))
```
##### 元组操作
###### 访问元素
###### 截取
###### 连接与重复
###### 修改元素
元组一旦创建就不能修改其中的元素。但可以通过修改整个元组的变量来达到修改元素的目的。
示例:
```python
t1 = (100, 200)
# 打印出 100 200
print(t1)
t1 = (20, 200)
# 打印出 20 200
print(t1)
```
> [!info]
>
> 示例中的 `t1`,前后两次「创建」,t1 这个元组的第一个元素就由 `100` 被「修改」为 `20`。这属于「曲线救国」式修改。
###### 删除元素
#### 集合
集合是由**不重复**元素组成的**无序**容器。Python 的中**集合**完全就是数学中的「集合] 概念的模拟,所以 Python 的集合中的元素特点:「**无序**」、「**不可重复**」。
> [!tip]
>
> 对应 [Java](../Java/Java_Note.md) 中的 [Set](../Java/Java_Base_Note.md#Set)。
> [!info]
>
> 关于列表和集合定义
>
> 在「类 C 语言」的标识符中,`[]`(中括号)暗含了「**有序性**」,即使用 `[]` 定义的数据类型,其中的元素是**有序**的。这种**有序性**有时体现在存储的有序,如 [C语言](../C/C_Note.md) 或 [Java](../Java/Java_Note.md) 中的 [数组](../C/C_Note.md#数组) 是使用 `[]` 来定义的;而有时这种**有序性**体现在「**可索引**」上,即可以通过索引来获取相应位置的元素。
>
>
> 而 `{}`(花括号)则隐含了「**无序性**」,即使用 `{}` 定义的数据类型,其中的元素是**无序**的。与**有序性**类似,使用 `{}` 定义的数据其**无序性**,有时体现在存储上,如 C、Java 等语言中 [函数](../C/C_Note.md#函数) 的「函数体」就是使用花括号来定义的,而可以谁其中的语句其存储上是**无序**的;而在集合类型中,这种「**无序性**」便体现在「不可索引」上,即不能通过索引值来获取相应位置的元素。
##### 创建集合
创建集合用花括号 `{}` 或 `set()` 函数。
示例:
```python
# 使用花括号创建集合
b = {1,3,4}
# 创建一个空的集合
b2 = set()
```
#### 字典
### 函数
#### 函数参数
##### 形式参数
[定义函数](#定义函数) 时,函数名称后面小括号的参数称为「**形式参数**」,简称「**形参**」。
##### 形式参数
[调用函数](#调用函数)] 时,函数名称后面小括号的参数称为「**实际参数**」,简称「**实参**」。
#### 定义函数
定义函数基本语法:
```python
def 函数名(参数列表):
# 函数体
```
函数**定义部分**以 `def` 关键字开头,后接函数名、小括号 `()` 和冒号 `:`。
函数体由多条语句组成的代码块,相对于函数定义部分保持合理缩进。
如果函数有**返回值**,使用 `return` 语句返回。如果函数中没有 `return` 语句,或者省略 `return` 语句的表达式,将返回 `None`,即返回空值。
#### 调用函数
基本语法:
```python
函数名(实参1,实参2...)
```
调用函数,实际就是将 [实际参数](#实际参数) 传递给 [形式参数](#形式参数),然后在函数体内实现相应功能的过程(函数本质在其实是表达式,即其核心功能就是求值,而求值之外的功能都称为「副作用」)。
### 类
类定义的基本语法:
```python
class 类名:
# 类体
```
> [!info]
>
> 类名一般使用大写字母开头,采用「**大驼峰命名法**」。
>
> 类名后有个冒号 `:`,类体向右缩进。
#### 实例
创建类的实例基本语法:
```python
类名()
```
#### 属性
在类中定义的变量称为类的**属性**,根据定义位置不同,可以分为:
* 类属性
* 实例属性
#### 方法
##### 实例方法
##### 类方法
##### 静态方法
静态方法,其方法休中不能使用类或实例的任何属性和方法。
实例对象和类对象都可以调用类的静态方法。
静态方法是类中的 [函数](#函数),不需要实例。
> [!info]
>
> 静态方法逻辑上属于类,但是和类本身没有关系。也就是说,在静态方法中,不会涉及类的属性和方法的操作。
>
> 可以说静态方法是个独立的、单纯的 [函数](#函数),只是「托管」给某个类的名称空间中,便于使用和维护。
##### 专有方法
类的专有方法,**方法名**通常用「双下划线」`__`**开头**和**结尾**。
类的常用专有方法:
* `__init__`:构造方法,生成对象时被调用
* `__del__`:析构方法,释放对象时被使用
### IO
#### 文件
#### 打开文件
使用 `open`[函数](#函数) 打开文件,并**返回文件对象**。如果文件无法被打开,会抛出 `OSError` 异常。
> [!tip]
>
> 使用 `open()` 函数时,一定要保证文件对象牌关闭状态。
语法:
```python
file=open(filename[,mode[,buffering[,encoding=Nonne]]])
```
* `file`:表示被创建的文件对象
* `filename`:用于指定包含待打开或待创建文件的文件路径与文件名称 [字符串](#syntax_basic_string) 值,需要使用单引号或双引号标。
* `mode`:可选参数,用于指定打开文件的模式,即描述文件如何使用,如读、写等。默认文件访问模式是「**只读**」,即 `r`。
常见模式及状态:
| 模式 | r | r+ | w | w+ | a | a+ |
|:------------------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|
| 读 | ✔ | ✔ | | ✔ | | ✔ |
| 写 | | ✔ | ✔ | ✔ | ✔ | ✔ |
| 创建 | | | ✔ | ✔ | ✔ | ✔ |
| 覆盖 | | | ✔ | ✔ | | |
| 文件指针在开始位置 | ✔ | ✔ | ✔ | ✔ | | |
| 文件指针在结尾位置 | | | | | ✔ | ✔ |
---
## 进阶语法
### 多任务
### 网络
### 图形界面
---
## 风格规范
### PEP8
#### PEP8 相关链接
* [PEP 8 – Style Guide for Python Code](https://peps.python.org/pep-0008/)
* [PEP 8 中文](https://blog.csdn.net/ratsniper/article/details/78954852)
* [PEP 257 – Docstring Conventions | peps.python.org](https://peps.python.org/pep-0257/)
### Google 规范风格
#### Google 规范相关链接
* [Google Python 风格指南](https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/contents/)
* [Google Python 编码规范 中文版](https://www.runoob.com/w3cnote/google-python-styleguide.html)
* [Google Python 编码规范 英文版](https://google.github.io/styleguide/pyguide.html)
---
## 相关笔记
* [Python 笔记](Python_Note.md)
* [Python 资料清单](Python_Material.md)
* [Python 视频](Python_Videos.md)