Python 基础知识语法体系庞杂,为了提供清晰的学习路径,以下内容将根据其核心要素进行结构化解析,并结合具体实例与代码片段进行说明[ref_1][ref_4][ref_5]。
### 一、 核心语法元素与约定
在编写任何程序前,必须掌握 Python 的语法基础规范,这是代码能够被正确解释和执行的前提[ref_6]。
#### 1.1 编码声明
Python 源码文件默认以 UTF-8 编码。虽然 Python 3 无需显式声明,但为了兼容性和清晰性,可以在文件开头添加编码声明[ref_6]。
```python
# -*- coding: utf-8 -*-
```
#### 1.2 标识符与命名规则
标识符是变量、函数、类等对象的名称,其命名需遵循以下规则[ref_2][ref_6]:
* 第一个字符必须是字母(`a-z`, `A-Z`)或下划线 `_`。
* 其余部分可以由字母、数字或下划线组成。
* 区分大小写。
* 不能是 Python 的**关键字**(保留字),如 `if`, `for`, `while`, `def`, `class` 等[ref_2]。
#### 1.3 注释
注释用于解释代码,不会被解释器执行。Python 支持两种注释方式[ref_2][ref_6]:
* **单行注释**:以 `#` 开头。
* **多行注释**:使用三个连续的单引号 `'''` 或双引号 `"""` 包裹。
```python
# 这是一个单行注释,解释下一行代码
name = "Python" # 定义一个字符串变量
"""
这是一个多行注释(文档字符串),
通常用于函数或模块的说明。
它可以跨越多行。
"""
```
#### 1.4 代码缩进
Python 最具特色的语法是使用**缩进来表示代码块**,而不是使用花括号 `{}`。这是强制性的语法要求,缩进不一致会导致 `IndentationError` 错误。通常使用**4个空格**作为一个缩进级别[ref_6]。
```python
if True:
print(“条件为真”) # 属于if代码块,需要缩进
print(“继续执行”) # 同样属于if代码块
print(“这个语句不属于if代码块”) # 退出缩进,与if同级
```
### 二、 变量与基本数据类型
变量是存储在内存中的值的引用。Python 是动态类型语言,变量无需预先声明类型,其类型由赋予的值决定[ref_2]。
#### 2.1 基本数据类型
Python 内置了以下几种核心数据类型,它们是不可再分的基本数据单元[ref_2][ref_3]:
| 数据类型 | 类型名 | 说明 | 示例 |
| :--- | :--- | :--- | :--- |
| 整型 | `int` | 整数,无大小限制 | `age = 20` |
| 浮点型 | `float` | 小数,或科学计数法 | `price = 19.99` |
| 布尔型 | `bool` | 逻辑值,`True` 或 `False` | `is_valid = True` |
| 字符串 | `str` | 由引号括起来的文本 | `name = "Alice"` |
| 空值 | `NoneType` | 表示空值或无值,类型为 `None` | `result = None` |
#### 2.2 类型查看与转换
可以使用 `type()` 函数查看变量的数据类型。不同类型之间可以通过内置函数进行转换[ref_2]。
```python
num_str = “123”
num_int = int(num_str) # 将字符串转换为整数,结果为 123 [ref_2]
num_float = float(num_int) # 将整数转换为浮点数,结果为 123.0
bool_val = bool(0) # 将整数0转换为布尔值,结果为 False
print(type(num_int)) # 输出:<class 'int'>
```
### 三、 数据结构(容器类型)
数据结构用于存储和组织一组数据,Python 提供了四种主要的容器类型[ref_3][ref_4]。
#### 3.1 列表 (List)
列表使用方括号 `[]` 创建,元素**有序、可变**,可以存储不同类型的数据[ref_3]。
```python
my_list = [1, ‘hello’, 3.14, True] # 创建列表
print(my_list[0]) # 通过索引访问第一个元素,输出:1
my_list.append(“new”) # 在末尾添加新元素
my_list[1] = “world” # 修改第二个元素
print(my_list) # 输出:[1, ‘world’, 3.14, True, ‘new’]
```
#### 3.2 元组 (Tuple)
元组使用圆括号 `()` 创建,元素**有序、不可变**。不可变性使其更安全,常作为字典的键[ref_3]。
```python
my_tuple = (‘apple’, ‘banana’, ‘cherry’)
print(my_tuple[1]) # 输出:’banana’
# my_tuple[1] = ‘orange’ # 此行会报错,因为元组不可修改
single_tuple = (50,) # 创建只包含一个元素的元组,逗号必不可少
```
#### 3.3 字典 (Dictionary)
字典使用花括号 `{}` 创建,存储**键值对 (Key-Value)**。键必须是不可变类型(如字符串、数字、元组),且唯一;值可以是任意类型。字典是**无序、可变**的[ref_3]。
```python
student = {‘name’: ‘Bob’, ‘age’: 21, ‘courses’: [‘Math’, ‘CS’]}
print(student[‘name’]) # 通过键访问值,输出:’Bob’
student[‘grade’] = ‘A’ # 添加新的键值对
student[‘age’] = 22 # 修改已有键对应的值
# 使用 get() 方法安全访问,避免键不存在时报错
print(student.get(‘score’, ‘Not Found’)) # 输出:’Not Found’
```
#### 3.4 集合 (Set)
集合使用花括号 `{}` 或 `set()` 函数创建,元素**无序、唯一、不可变**(元素本身需为不可变类型)。常用于去重和成员关系测试[ref_4]。
```python
my_set = {1, 2, 2, 3, 3} # 创建集合,重复元素会被自动去重
print(my_set) # 输出:{1, 2, 3}
my_set.add(4) # 添加元素
my_set.remove(2) # 移除元素
print(1 in my_set) # 检查成员关系,输出:True
```
### 四、 程序控制流
控制流语句决定了代码的执行顺序。
#### 4.1 条件语句 (`if`, `elif`, `else`)
根据条件表达式的布尔值 (`True`/`False`) 决定执行哪个代码块[ref_1]。
```python
score = 85
if score >= 90:
grade = ‘A’
elif score >= 80: # 可以有多条 elif 分支
grade = ‘B’
elif score >= 70:
grade = ‘C’
else: # 所有条件都不满足时执行
grade = ‘D’
print(f“得分 {score},等级为 {grade}“) # 输出:得分 85,等级为 B
```
#### 4.2 循环语句
* **`for` 循环**:用于遍历任何可迭代对象(如列表、字符串、字典等)[ref_1]。
* **`while` 循环**:在条件为真时重复执行代码块[ref_1]。
```python
# for 循环遍历列表
fruits = [‘apple’, ‘banana’, ‘mango’]
for fruit in fruits:
print(f“I like {fruit}“)
# for 循环与 range() 函数结合,生成数字序列
for i in range(5): # 生成 0, 1, 2, 3, 4
print(i)
# while 循环
count = 0
while count < 3:
print(f“Count is {count}“)
count += 1 # 重要:必须修改循环条件,否则会陷入无限循环
# 循环控制:break 和 continue
for num in range(10):
if num == 3:
continue # 跳过本次循环的剩余语句,直接进入下一次迭代
if num == 7:
break # 完全终止整个循环
print(num) # 输出:0, 1, 2, 4, 5, 6
```
### 五、 函数
函数是组织好的、可重复使用的代码块,用于实现单一或相关联的功能[ref_1]。
#### 5.1 函数定义与调用
使用 `def` 关键字定义函数[ref_1]。
```python
def greet(name): # 定义函数,`name` 是形式参数
“”“一个简单的问候函数”“” # 文档字符串,用于说明函数功能
return f“Hello, {name}!“ # 使用 return 语句返回值
message = greet(“Alice”) # 调用函数,并传入实际参数 “Alice”
print(message) # 输出:Hello, Alice!
```
#### 5.2 函数参数
Python 函数支持多种参数传递方式,极大增强了灵活性[ref_1]。
| 参数类型 | 语法 | 说明 |
| :--- | :--- | :--- |
| **位置参数** | `func(a, b)` | 按参数位置顺序传递。 |
| **默认参数** | `func(a, b=10)` | 为参数指定默认值,调用时可省略。 |
| **可变位置参数** | `func(*args)` | 接收任意数量的位置参数,打包为元组 `args`。 |
| **可变关键字参数** | `func(**kwargs)` | 接收任意数量的关键字参数,打包为字典 `kwargs`。 |
| **关键字参数** | `func(b=2, a=1)` | 调用时使用 `参数名=值` 的形式,可不按顺序。 |
```python
# 综合示例
def info(name, age=18, *hobbies, **details):
print(f“Name: {name}“)
print(f“Age: {age}“)
print(f“Hobbies: {hobbies}“) # 输出一个元组
print(f“Details: {details}“) # 输出一个字典
info(“Bob”, 25, “Reading”, “Music”, city=“Beijing”, score=95)
# 输出:
# Name: Bob
# Age: 25
# Hobbies: (‘Reading’, ‘Music’)
# Details: {‘city’: ‘Beijing’, ‘score’: 95}
```
#### 5.3 变量作用域
函数内部定义的变量是**局部变量**,仅在函数内有效。函数外部定义的变量是**全局变量**。要在函数内部修改全局变量,需使用 `global` 关键字声明[ref_1]。
```python
global_var = “I’m global”
def test_scope():
local_var = “I’m local” # 局部变量
global global_var # 声明使用全局变量
global_var = “Modified inside function”
print(local_var)
print(global_var)
test_scope()
# print(local_var) # 报错:NameError,局部变量在外部无法访问
print(global_var) # 输出:Modified inside function
```
#### 5.4 匿名函数 (`lambda`)
`lambda` 关键字用于创建小巧、匿名的函数。它只能包含一个表达式,并自动返回该表达式的结果[ref_1]。
```python
# 语法:lambda 参数列表: 表达式
square = lambda x: x ** 2
print(square(5)) # 输出:25
# 常用于需要函数作为参数的场景,如 sorted()
students = [(‘Alice’, 88), (‘Bob’, 75), (‘Cathy’, 92)]
# 按元组第二个元素(分数)排序
sorted_students = sorted(students, key=lambda s: s[1], reverse=True)
print(sorted_students) # 输出:[(‘Cathy’, 92), (‘Alice’, 88), (‘Bob’, 75)]
```