Python 学习指南
1. Python 基础类型
Python 支持多种数据类型,主要包括:
整数(int):如
18、-5、0字符串(str):如
"hello"、'world'浮点数(float):如
3.14、-0.5布尔值(bool):
True或False空值(NoneType):
None列表(list):如
[1, 2, 3]元组(tuple):如
(1, 2, 3)字典(dict):如
{"name": "张三"}
代码示例
# 字符串
msg = "hello world"
print(msg) # 输出: hello world
# 布尔值
flag = False
if flag:
print("flag is True")
else:
print("flag is False") # 输出: flag is False
# 查看类型
print(type(flag)) # 输出: <class 'bool'>
print(type(msg)) # 输出: <class 'str'>
# 浮点数和整数
PI = 3.1415926
age = 18
print(PI, type(PI)) # 输出: 3.1415926 <class 'float'>
print(age, type(age)) # 输出: 18 <class 'int'>
# Python 严格区分大小写2. 列表(List)
列表是 Python 中最常用的数据结构之一,用于存储有序的元素集合。
列表操作方法
切片操作
切片用于访问列表的一部分,语法:list[start:end:step]
左闭右开区间:
[start:end]包含 start,不包含 end默认值:start 默认 0,end 默认列表长度,step 默认 1
索引越界:切片不会引发 IndexError
my_list = [10, 20, 30, 40, 50]
# 通过切片访问
print(my_list[1:4]) # 输出: [20, 30, 40]
print(my_list[:3]) # 输出: [10, 20, 30](从开头到索引2)
print(my_list[2:]) # 输出: [30, 40, 50](从索引2到末尾)
print(my_list[::2]) # 输出: [10, 30, 50](步长为2)
# 通过切片删除
my_list[1:3] = [] # 删除索引1-2的元素
print(my_list) # 输出: [10, 40, 50]
# 经过删除后通过切片插入
my_list[1:1] = [25, 35] # 在索引1处插入
print(my_list) # 输出: [10, 25, 35, 40, 50]列表操作示例
# 创建列表
my_list = [1, 2, 3, 4, 5, "香蕉"]
print(my_list) # 输出: [1, 2, 3, 4, 5, '香蕉']
# 修改元素
my_list[0] = 100
print(my_list) # 输出: [100, 2, 3, 4, 5, '香蕉']
# 新增元素
my_list.append("orange")
print(my_list) # 输出: [100, 2, 3, 4, 5, '香蕉', 'orange']
# 删除元素
my_list.remove(2) # 删除值为2的元素
print(my_list) # 输出: [100, 3, 4, 5, '香蕉', 'orange']
# 列表长度
print(len(my_list)) # 输出: 63. 元组(Tuple)
元组是不可变的列表,使用圆括号 () 定义,一旦创建就不能修改。
元组特点
不可变性:创建后不能修改元素
可以存储不同类型的数据
可以通过索引访问元素
可以使用
len()、max()、min()等函数
代码示例
# 创建元组
tuple1 = (1, 2, 3, 4, 5, "香蕉")
print(tuple1) # 输出: (1, 2, 3, 4, 5, '香蕉')
print(type(tuple1)) # 输出: <class 'tuple'>
# 访问元素
print(tuple1[0]) # 输出: 1
print(tuple1[-1]) # 输出: 香蕉
# 元组不可修改
# tuple1[0] = 100 # 这行代码会引发 TypeError
# 遍历元组
for item in tuple1:
print(item)4. 字典(Dictionary)
字典是键值对(key-value)的无序集合,使用大括号 {} 定义,键必须是唯一的。
字典操作方法
代码示例
# 创建字典
person = {"name": "张三", "age": 18, "gender": "男"}
print(person) # 输出: {'name': '张三', 'age': 18, 'gender': '男'}
print(type(person)) # 输出: <class 'dict'>
# 访问值
print(person["name"]) # 输出: 张三
print(person.get("age")) # 输出: 18
print(person.get("address", "未知")) # 输出: 未知(键不存在)
# 修改值
person["age"] = 19
print(person) # 输出: {'name': '张三', 'age': 19, 'gender': '男'}
# 添加新键值对
person["address"] = "北京"
print(person) # 输出: {'name': '张三', 'age': 19, 'gender': '男', 'address': '北京'}
# 删除键值对
del person["gender"]
print(person) # 输出: {'name': '张三', 'age': 19, 'address': '北京'}
# 遍历字典
for key in person:
print(f"{key}: {person[key]}")
for key, value in person.items():
print(f"{key}: {value}")
# 检查键是否存在
print("name" in person) # 输出: True
print("gender" in person) # 输出: False
# 字典长度
print(len(person)) # 输出: 35. 条件判断(if)
条件判断用于根据不同条件执行不同的代码块。
语法结构
if 条件1:
# 条件1为True时执行
elif 条件2:
# 条件1为False且条件2为True时执行
else:
# 所有条件都为False时执行代码示例
# 基本条件判断
age = 7
if age >= 18:
print("成年人")
elif age >= 6:
print("小学生") # 输出: 小学生
else:
print("未成年人")
# 多个条件
score = 85
if score >= 90:
print("优秀")
elif score >= 80:
print("良好") # 输出: 良好
elif score >= 60:
print("及格")
else:
print("不及格")6. 循环结构
6.1 for 循环
for 循环用于遍历可迭代对象(如列表、元组、字符串等)。
语法结构
for 变量 in 可迭代对象:
# 循环体代码示例
# 遍历列表
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
print(fruit)
# 使用 range() 函数
# range(10) 生成 0-9 的整数
for i in range(10):
print(i)
# range(start, end) 生成 start 到 end-1 的整数
for i in range(5, 10):
print(i) # 输出: 5, 6, 7, 8, 9
# range(start, end, step) 生成指定步长的整数
for i in range(0, 10, 2):
print(i) # 输出: 0, 2, 4, 6, 8
# 累加计算
sum_result = 0
for i in range(10):
sum_result += i
print(sum_result)6.2 while 循环
while 循环用于在条件为 True 时重复执行代码块。
语法结构
while 条件:
# 循环体代码示例
# 基本 while 循环
count = 0
while count < 5:
print(f"count: {count}")
count += 1
# 无限循环(谨慎使用)
# while True:
# print("这是无限循环")
# 循环嵌套
for i in range(3):
for j in range(2):
print(f"i={i}, j={j}")7. 函数定义与调用
函数是可重用的代码块,使用 def 关键字定义。
函数语法
def 函数名(参数1, 参数2=默认值):
# 函数体
return 返回值函数特点
函数可以有多个参数,支持默认值
函数可以返回一个或多个值
函数内部变量的作用域是局部的
函数外部变量是全局的,可通过
global关键字在函数内部修改
代码示例
# 基本函数定义
def say_hello(name="张三"):
"""这是函数的文档字符串,用于说明函数功能"""
return f"Hello, {name}!"
# 调用函数
print(say_hello()) # 输出: Hello, 张三!
print(say_hello("李四")) # 输出: Hello, 李四!
# 带多个参数的函数
def add(a, b):
return a + b
result = add(3, 5)
print(result) # 输出: 8
# 函数内部的作用域
def test_scope():
local_var = "局部变量"
print(local_var) # 可以访问局部变量
# print(local_var) # 这行代码会引发 NameError,因为局部变量在函数外部不可访问
# 使用全局变量
global_var = "全局变量"
def test_global():
global global_var # 声明使用全局变量
global_var = "修改后的全局变量"
print(global_var)
test_global() # 输出: 修改后的全局变量
print(global_var) # 输出: 修改后的全局变量
# 函数返回多个值
def get_user_info():
name = "张三"
age = 18
return name, age
user_name, user_age = get_user_info()
print(user_name, user_age) # 输出: 张三 188. 面向对象编程
Python 是面向对象的编程语言,支持类和对象的概念。
类的基本概念
类(Class):对象的蓝图,定义了对象的属性和方法
对象(Object):类的实例
属性(Attribute):对象的特征
方法(Method):对象的行为
self:代表类的实例,必须是方法的第一个参数
类的语法
class 类名:
def __init__(self, 参数1, 参数2):
# 初始化方法,创建对象时自动调用
self.属性1 = 参数1
self.属性2 = 参数2
def 方法名(self, 参数):
# 方法体
return 返回值代码示例
# 定义类
class Person:
"""人员类"""
def __init__(self, name, age):
"""初始化方法"""
self.name = name # 实例属性
self.age = age
def say_hello(self, sex="男"):
"""打招呼方法"""
return f"Hello, {self.name}!性别:{sex}"
def birthday(self):
"""过生日方法,年龄加1"""
self.age += 1
return f"{self.name}今年{self.age}岁了!"
def get_age(self):
"""获取年龄方法"""
return self.age
# 创建对象(实例化)
person1 = Person("张三", 18)
print(type(person1)) # 输出: <class '__main__.Person'>
# 调用对象方法
print(person1.say_hello()) # 输出: Hello, 张三!性别:男
print(person1.say_hello("女")) # 输出: Hello, 张三!性别:女
# 调用修改属性的方法
print(person1.birthday()) # 输出: 张三今年19岁了!
print(person1.get_age()) # 输出: 19
# 直接访问属性
print(person1.name) # 输出: 张三
print(person1.age) # 输出: 198.1 类继承
类继承允许创建一个新类(子类),继承现有类(父类)的属性和方法。子类可以扩展或修改父类的功能。
继承语法
class 子类名(父类名):
def __init__(self, 父类参数, 子类参数):
super().__init__(父类参数) # 调用父类的初始化方法
self.子类属性 = 子类参数
def 子类方法(self):
# 子类方法实现
return 结果继承特点
子类继承父类的所有属性和方法
子类可以重写父类的方法
子类可以添加新的属性和方法
使用
super()调用父类的方法
代码示例
# 定义父类
class Mammal:
def __init__(self, name, sex):
self.name = name
self.sex = sex
self.num_eyes = 2 # 所有哺乳动物都有2只眼睛
def breathe(self):
print(f"{self.name}在呼吸")
# 定义子类,继承自Mammal
class Person(Mammal):
def __init__(self, name, sex, occupation):
# 调用父类的初始化方法,继承父类的属性
super().__init__(name, sex)
# 添加子类独有的属性
self.occupation = occupation
def work(self):
# 子类独有的方法
print(f"{self.name}正在工作,职业是{self.occupation}")
def breathe(self):
# 重写父类的方法
print(f"{self.name}正在用鼻子呼吸")
# 测试继承
# 如果子类没有自己的构造函数 __init__,会直接调用父类的构造函数
class Dog(Mammal):
def bark(self):
print(f"{self.name}在汪汪叫")
# 创建子类实例
person = Person("张三", "男", "程序员")
dog = Dog("旺财", "公")
# 调用继承的属性和方法
print(person.name) # 继承自父类的属性
print(person.num_eyes) # 继承自父类的属性
person.breathe() # 调用重写后的方法
person.work() # 调用子类独有的方法
dog.breathe() # 调用父类的方法9. 数学计算(Math 模块)
Python 的 math 模块提供了丰富的数学函数。
常用数学函数
常量
math.pi:圆周率 π(约3.14159...)math.e:自然常数 e(约2.71828...)
代码示例
import math
# 平方根
print(math.sqrt(16)) # 输出: 4.0
# 取整
print(math.ceil(3.14)) # 输出: 4
print(math.floor(3.14)) # 输出: 3
# 幂运算
print(math.pow(2, 3)) # 输出: 8.0
print(2 ** 3) # 输出: 8(Python 内置幂运算)
# 绝对值
print(math.fabs(-10)) # 输出: 10.0
print(abs(-10)) # 输出: 10(Python 内置绝对值)
# 最大公约数和最小公倍数
print(math.gcd(12, 18)) # 输出: 6
print(math.lcm(12, 18)) # 输出: 36
# 三角函数(使用弧度)
print(math.sin(math.pi / 2)) # 输出: 1.0
print(math.cos(math.pi)) # 输出: -1.0
# 角度转换
print(math.degrees(math.pi / 2)) # 输出: 90.0
print(math.radians(90)) # 输出: 1.5707963267948966
# 对数
print(math.log(math.e)) # 输出: 1.0
print(math.log10(100)) # 输出: 2.0
# 常量
print(math.pi) # 输出: 3.141592653589793
print(math.e) # 输出: 2.71828182845904510. 输入输出(Input/Output)
输入函数(input)
input() 函数用于从控制台获取用户输入,返回值是字符串类型。
输出函数(print)
print() 函数用于将内容输出到控制台,支持多个参数和格式化输出。
类型转换
代码示例
# 基本输入输出
name = input("请输入您的姓名:")
print(f"您的姓名是:{name}")
# 输入数字并转换类型
age_str = input("请输入您的年龄:")
age = int(age_str) # 转换为整数
print(f"您明年将满 {age + 1} 岁")
# 多个输入
height = float(input("请输入您的身高(米):"))
weight = float(input("请输入您的体重(千克):"))
# BMI 计算
bmi = weight / (height ** 2)
print(f"您的 BMI 指数是:{bmi:.2f}")
# 类型转换示例
num1 = 123
num2 = "456"
print(str(num1) + num2) # 输出: 123456(字符串拼接)
print(num1 + int(num2)) # 输出: 579(整数相加)11. 字符串格式化
Python 提供了多种字符串格式化方式,常用的有:
1. f-strings(Python 3.6+)
使用 f"{变量}" 语法,简洁高效。
2. format() 方法
使用 "{}".format() 语法,兼容性好。
3. 百分号(%)格式化
传统的格式化方式,类似 C 语言的 printf。
代码示例
# f-strings 格式化
name = "张三"
age = 18
print(f"我叫{name},今年{age}岁") # 输出: 我叫张三,今年18岁
# 格式化数字
pi = 3.1415926
print(f"π的值是:{pi:.2f}") # 输出: π的值是:3.14
print(f"π的值是:{pi:10.3f}") # 输出: π的值是: 3.142(总宽度10,右对齐)
# format() 方法
print("我叫{},今年{}岁".format(name, age)) # 输出: 我叫张三,今年18岁
print("我叫{0},今年{1}岁,{0}很优秀".format(name, age)) # 输出: 我叫张三,今年18岁,张三很优秀
print("我叫{name},今年{age}岁".format(name="李四", age=20)) # 输出: 我叫李四,今年20岁
# 百分号格式化
print("我叫%s,今年%d岁" % (name, age)) # 输出: 我叫张三,今年18岁
print("π的值是:%.2f" % pi) # 输出: π的值是:3.14
# 多行字符串(保留格式)
multi_line = """这是第一行
这是第二行
这是第三行"""
print(multi_line)数字格式化说明符
12. range() 函数
range() 函数用于生成整数序列,常用于 for 循环中。
语法
range(stop) # 生成 0 到 stop-1 的整数
range(start, stop) # 生成 start 到 stop-1 的整数
range(start, stop, step) # 生成指定步长的整数序列代码示例
# 生成 0-4 的整数
for i in range(5):
print(i) # 输出: 0, 1, 2, 3, 4
# 生成 5-9 的整数
for i in range(5, 10):
print(i) # 输出: 5, 6, 7, 8, 9
# 生成 5-19 的奇数
for i in range(5, 20, 2):
print(i) # 输出: 5, 7, 9, 11, 13, 15, 17, 19
# 生成倒序序列
for i in range(10, 0, -1):
print(i) # 输出: 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
# 将 range 转换为列表
numbers = list(range(10))
print(numbers) # 输出: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]13. 文件操作
13.1 文件路径
文件路径用于定位文件在计算机中的位置,主要有两种类型:
相对路径
相对于当前工作目录的路径,不需要完整路径信息。
绝对路径
从根目录开始的完整路径,包含所有目录层级。
13.2 读取文件
使用 open() 函数打开文件,返回一个文件对象。
open() 函数语法
open(file_path, mode='r', encoding=None)文件打开模式
文件读取方法
代码示例
# 1. 基本读取
with open('./test.txt', 'r', encoding='utf-8') as f:
content = f.read()
print(content)
# 2. 逐行读取(适合大文件)
with open('./test.txt', 'r', encoding='utf-8') as f:
line = f.readline()
while line:
print(line.strip())
line = f.readline()
# 3. 读取所有行到列表
with open('./test.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
for line in lines:
print(line.strip())
# 4. 读取指定字节数
with open('./test.txt', 'r', encoding='utf-8') as f:
print(f.read(10)) # 读取前10个字符
print(f.read(10)) # 继续读取接下来的10个字符13.3 文件写入
基本写入
# 覆盖写入
with open('./test.txt', 'w', encoding='utf-8') as f:
f.write('Hello, World!\n')
f.write('这是第二行\n')
# 追加写入
with open('./test.txt', 'a', encoding='utf-8') as f:
f.write('这是追加的一行\n')
# 写入多行
lines = ['第一行', '第二行', '第三行']
with open('./test.txt', 'w', encoding='utf-8') as f:
f.writelines([line + '\n' for line in lines])13.4 文件关闭
文件使用完毕后必须关闭,否则会占用系统资源。
两种关闭方式
# 1. 显式关闭
f = open('./test.txt', 'r')
try:
content = f.read()
print(content)
finally:
f.close() # 确保文件被关闭
# 2. 使用 with 语句(推荐)
with open('./test.txt', 'r') as f:
content = f.read()
print(content)
# with 语句会自动关闭文件,无需手动调用 close()14. 异常处理
14.1 try-except 语句
用于捕获和处理程序运行时的异常。
基本语法
try:
# 可能引发异常的代码
result = 10 / 0
except ZeroDivisionError:
# 处理特定异常
print("除数不能为零")
except Exception as e:
# 处理所有其他异常
print(f"发生了异常: {e}")
else:
# 没有异常时执行
print("执行成功")
finally:
# 无论是否有异常都会执行
print("清理资源")常见异常类型
异常处理示例
try:
user_weight = float(input("请输入您的体重(单位:kg): "))
user_height = float(input("请输入您的身高(单位:m): "))
if user_height <= 0:
raise ValueError("身高必须大于零")
bmi = user_weight / (user_height ** 2)
except ValueError as e:
print(f"输入错误: {e}")
except Exception as e: # 或者 except:
print(f"发生了未知错误: {e}")
else:
print(f"您的BMI指数是: {bmi:.2f}")
finally:
print("程序执行完毕")14.2 断言(assert)
断言用于检查程序中的条件是否为真,如果为假则引发 AssertionError。
语法
assert 条件, "错误消息"代码示例
# 基本断言
assert len("hello") == 5, "字符串长度应为5"
# 断言在测试中的应用
def add(a, b):
return a + b
# 测试add函数
assert add(1, 2) == 3, "1+2应该等于3"
assert add(-1, 1) == 0, "-1+1应该等于0"
assert add(0, 0) == 0, "0+0应该等于0"
print("所有断言通过!")注意事项
断言主要用于开发和测试阶段
生产环境中可以通过
-O选项关闭断言断言失败会立即终止程序执行
15. 单元测试(unittest)
15.1 什么是单元测试
单元测试是对程序中最小可测试单元(如函数、方法)进行的测试。
15.2 使用 unittest 框架
测试用例结构
import unittest
class TestClassName(unittest.TestCase):
"""测试类"""
def setUp(self):
"""每个测试方法执行前调用"""
pass
def tearDown(self):
"""每个测试方法执行后调用"""
pass
def test_method_name(self):
"""测试方法,必须以test_开头"""
# 断言语句
self.assertEqual(1 + 2, 3)常用断言方法
完整测试示例
# calculator.py
class Calculator:
def add(self, a, b):
return a + b
def subtract(self, a, b):
return a - b
def multiply(self, a, b):
return a * b
def divide(self, a, b):
if b == 0:
raise ValueError("除数不能为零")
return a / b
# test_calculator.py
import unittest
from calculator import Calculator
class TestCalculator(unittest.TestCase):
"""测试计算器类"""
def setUp(self):
"""测试前的准备工作"""
self.calc = Calculator()
print("\n开始测试...")
def tearDown(self):
"""测试后的清理工作"""
print("测试结束...")
def test_add(self):
"""测试加法功能"""
self.assertEqual(self.calc.add(1, 2), 3)
self.assertEqual(self.calc.add(-1, 1), 0)
self.assertEqual(self.calc.add(0, 0), 0)
self.assertAlmostEqual(self.calc.add(1.5, 2.5), 4.0)
def test_subtract(self):
"""测试减法功能"""
self.assertEqual(self.calc.subtract(5, 3), 2)
self.assertEqual(self.calc.subtract(3, 5), -2)
def test_multiply(self):
"""测试乘法功能"""
self.assertEqual(self.calc.multiply(2, 3), 6)
self.assertEqual(self.calc.multiply(-2, 3), -6)
def test_divide(self):
"""测试除法功能"""
self.assertEqual(self.calc.divide(6, 3), 2)
self.assertEqual(self.calc.divide(5, 2), 2.5)
# 测试除数为零的情况
with self.assertRaises(ValueError):
self.calc.divide(5, 0)
if __name__ == "__main__":
unittest.main()运行测试用例
# 方法1:直接运行测试文件
python test_calculator.py
# 方法2:使用unittest模块运行
python -m unittest test_calculator.py
# 方法3:运行所有测试文件
python -m unittest discover
# 方法4:运行特定测试类
python -m unittest test_calculator.TestCalculator
# 方法5:运行特定测试方法
python -m unittest test_calculator.TestCalculator.test_add15.3 测试最佳实践
每个测试方法只测试一个功能
测试方法名应清晰描述测试内容
使用 setUp 和 tearDown 方法管理测试资源
测试覆盖正常情况和边界情况
测试应该是独立的,不依赖于其他测试
16. 高阶函数和匿名函数
16.1 高阶函数
高阶函数是指可以接受函数作为参数,或者返回函数的函数。
常见高阶函数
代码示例
# map 示例:将列表中的每个元素平方
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # 输出: [1, 4, 9, 16, 25]
# filter 示例:筛选出偶数
numbers = [1, 2, 3, 4, 5, 6]
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens) # 输出: [2, 4, 6]
# sorted 示例:按字符串长度排序
words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=len)
print(sorted_words) # 输出: ["date", "apple", "cherry", "banana"]
# 自定义高阶函数
def apply_function(func, x):
"""将函数应用于x"""
return func(x)
def square(x):
"""计算平方"""
return x ** 2
result = apply_function(square, 5)
print(result) # 输出: 2516.2 匿名函数
匿名函数是指没有名字的函数,使用 lambda 关键字定义。
语法
lambda 参数: 表达式代码示例
# 基本使用
square = lambda x: x ** 2
print(square(3)) # 输出: 9
# 作为高阶函数的参数
doubled = list(map(lambda x: x * 2, [1, 2, 3]))
print(doubled) # 输出: [2, 4, 6]
# 多个参数
add = lambda x, y: x + y
print(add(3, 5)) # 输出: 8
# 与条件表达式结合
even_or_odd = lambda x: "偶数" if x % 2 == 0 else "奇数"
print(even_or_odd(4)) # 输出: 偶数
print(even_or_odd(5)) # 输出: 奇数注意事项
匿名函数只能包含一个表达式
表达式的结果就是函数的返回值
适合简单的、一次性使用的函数
复杂逻辑建议使用普通函数
17. 装饰器
17.1 什么是装饰器
装饰器是一种特殊的高阶函数,用于修改其他函数的功能,而不改变其代码。
17.2 装饰器的基本使用
简单装饰器示例
# 定义装饰器
def my_decorator(func):
def wrapper():
print("装饰器开始执行")
func()
print("装饰器结束执行")
return wrapper
# 使用装饰器
@my_decorator
def say_hello():
print("Hello, World!")
# 调用函数
say_hello()带参数的装饰器
# 带参数的装饰器
def my_decorator(func):
def wrapper(*args, **kwargs):
print("装饰器开始执行")
result = func(*args, **kwargs)
print("装饰器结束执行")
return result
return wrapper
@my_decorator
def add(a, b):
return a + b
result = add(3, 5)
print(f"结果: {result}")装饰器的应用场景
日志记录
性能测试
权限验证
缓存
事务处理
总结
本指南涵盖了 Python 编程的核心知识点,包括:
基础数据类型:整数、字符串、浮点数、布尔值、空值等
数据结构:列表、元组、字典等
控制流:条件判断(if-elif-else)、循环结构(for、while)
函数:定义与调用、参数传递、作用域、闭包
面向对象编程:类定义、属性与方法、继承、多态
文件操作:路径、读取、写入、关闭
异常处理:try-except-else-finally、断言
单元测试:unittest框架的使用
高级特性:高阶函数、匿名函数、装饰器
学习 Python 最好的方法是多写代码,多实践。
学习建议
基础先行:先掌握基础语法和核心概念
多写代码:理论结合实践,编写小项目
阅读源码:学习优秀的开源项目
参与社区:加入 Python 社区,向他人学习
持续学习:Python 生态不断发展,保持学习习惯
祝您学习愉快!