1. Python基础
• Python基础语法:变量、常量、数据类型(字符串、整数、浮点数、布尔值)、运算符、表达式。
• 控制结构:条件语句(if-elif-else)、循环语句(for循环和while循环)、循环控制语句(break、continue、pass)。
• 数据结构:
• 列表:列表的创建、增删改查、切片、列表推导式。
• 元组:不可变序列,适用于不需要修改的数据。
• 集合:集合操作(交集、并集、差集)、去重、集合推导式。
• 字典:键值对存储、增删改查、字典推导式。
变量与数据类型:
x = 10 # 整数
y = 3.14 # 浮点数
name = "Alice" # 字符串
is_student = True # 布尔值
print(x, y, name, is_student)
控制结构:
age = 18
if age >= 18:
print("Adult")
else:
print("Minor")
for i in range(5): # 循环打印0到4
print(i)
数据结构:
# 列表
fruits = ["apple", "banana", "cherry"]
fruits.append("orange")
print(fruits) # 输出 ['apple', 'banana', 'cherry', 'orange']
# 字典
person = {"name": "Alice", "age": 25}
print(person["name"]) # 输出 Alice
2. 函数编程
• 函数的定义和调用:参数传递(位置参数、关键字参数、默认参数、可变参数)、返回值。
• 匿名函数:lambda表达式的使用。
• 函数的高级用法:闭包、装饰器、递归函数。
• 内置函数:常用内置函数(如map、filter、reduce、zip等)。
函数定义:
def greet(name):
return f"Hello, {name}!"
print(greet("Alice")) # 输出 Hello, Alice!
匿名函数:
add = lambda x, y: x + y
print(add(5, 3)) # 输出 8
常用内置函数:
numbers = [1, 2, 3, 4, 5]
doubled = list(map(lambda x: x * 2, numbers))
print(doubled) # 输出 [2, 4, 6, 8, 10]
3. 面向对象编程(OOP)
• 类与对象:类的定义、实例化对象、构造函数__init__。
• 类的成员:类属性、实例属性、方法(普通方法、类方法、静态方法)。
• 继承和多态:继承的概念、方法重写、super()函数的使用。
• 特殊方法:__str__、__repr__、__len__、运算符重载等。
• 封装、继承、多态:类的封装性、访问控制(公有、私有、受保护属性)、多态性。
类和对象:
class Dog:
def __init__(self, name):
self.name = name
def bark(self):
print(f"{self.name} is barking!")
my_dog = Dog("Buddy")
my_dog.bark() # 输出 Buddy is barking!
继承:
class Animal:
def speak(self):
print("Animal sound")
class Dog(Animal):
def speak(self):
print("Woof!")
dog = Dog()
dog.speak() # 输出 Woof!
4. 模块和包
• 模块的创建和导入:import、from...import语句、as起别名。
• 标准库的使用:math、random、datetime、os、sys等模块。
• 包的管理:创建包、__init__.py文件的作用、包的导入。
导入模块:
import math
print(math.sqrt(16)) # 输出 4.0
自定义模块:创建一个名为mymodule.py的文件
# mymodule.py
def greet(name):
print(f"Hello, {name}!")
# 使用自定义模块
import mymodule
mymodule.greet("Alice") # 输出 Hello, Alice!
5. 文件操作
• 文件读写:文件的打开与关闭、read、write、readlines、writelines等方法。
• 文件的模式:文本模式、二进制模式、追加模式等。
• 文件路径操作:使用os模块、文件与目录的创建与删除。
文件读写:
# 写入文件
with open("example.txt", "w") as f:
f.write("Hello, world!")
# 读取文件
with open("example.txt", "r") as f:
content = f.read()
print(content) # 输出 Hello, world!
6. 异常处理
• 异常的捕获:try-except结构、捕获多种异常、else和finally子句的使用。
• 自定义异常:创建自定义异常类,使用raise抛出异常。
• 常见异常类型:IndexError、KeyError、ValueError、TypeError等。
捕获异常:
try:
x = int(input("Enter a number: "))
except ValueError:
print("That's not a valid number!")
7. 高级特性
• 生成器:yield、生成器表达式、生成器的应用场景。
• 迭代器:__iter__和__next__方法、创建自定义迭代器。
• 装饰器:函数装饰器、类装饰器。
• 上下文管理器:with语句、__enter__和__exit__方法的实现。
生成器:
def countdown(n):
while n > 0:
yield n
n -= 1
for number in countdown(3):
print(number) # 输出 3 2 1
装饰器:
def my_decorator(func):
def wrapper():
print("Something is happening before the function is called.")
func()
print("Something is happening after the function is called.")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
8. 数据处理与分析
• 第三方库:
• NumPy:数值计算,数组操作。
• Pandas:数据清洗与分析,DataFrame的操作。
• Matplotlib & Seaborn:数据可视化,绘制图表。
• 数据读取与写入:读取CSV、Excel、数据库数据,数据导出等。
NumPy和Pandas:
import numpy as np
import pandas as pd
data = np.array([1, 2, 3, 4])
print(data * 2) # 输出 [2 4 6 8]
df = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [25, 30]})
print(df)
9. 网络编程
• 网络请求:使用requests库进行HTTP请求,处理JSON数据。
• Socket编程:Socket的基本概念、创建TCP和UDP连接。
• 爬虫入门:基础爬虫、正则表达式、BeautifulSoup和XPath。
• 使用Requests库:
import requests
response = requests.get("www.baidu.con")
print(response.json())
10. 多线程与多进程
• 多线程:线程的创建、线程同步、线程锁、threading模块。
• 多进程:进程的创建、进程间通信、multiprocessing模块。
• 协程:异步编程、asyncio库。
多线程:
import threading
def print_numbers():
for i in range(5):
print(i)
thread = threading.Thread(target=print_numbers)
thread.start()
thread.join()
11. 数据库操作
• 数据库基础:关系型数据库、SQL语句。
• SQLite:内置数据库操作,数据的增删改查。
• MySQL和PostgreSQL:使用pymysql或psycopg2库进行连接与操作。
• ORM:使用SQLAlchemy等库进行ORM操作。
SQLite操作:
import sqlite3
conn = sqlite3.connect("example.db")
c = conn.cursor()
c.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)")
c.execute("INSERT INTO users (name) VALUES ('Alice')")
conn.commit()
for row in c.execute("SELECT * FROM users"):
print(row)
conn.close()
12. 测试与调试
• 单元测试:unittest框架的使用,编写测试用例。
• 调试技巧:pdb模块、断点调试、日志记录(logging模块)。
• 代码规范:PEP8规范、文档字符串、类型注解。
单元测试:
import unittest
def add(x, y):
return x + y
class TestMath(unittest.TestCase):
def test_add(self):
self.assertEqual(add(3, 4), 7)
if __name__ == '__main__':
unittest.main()
13. 常用工具
• 虚拟环境:使用venv或virtualenv创建虚拟环境。
• 包管理:使用pip安装、更新、卸载包。
• Git版本控制:基本操作(clone、commit、push、pull等),Git分支管理。
虚拟环境:
python3 -m venv myenv
source myenv/bin/activate # 激活虚拟环境 (Linux/Mac)
myenv\Scripts\activate # 激活虚拟环境 (Windows)
Git基本操作:
git init
git add .
git commit -m "Initial commit"
git push origin main
常见的注意事项:
1. 变量命名规范
• 遵循PEP 8命名规范,变量名使用小写字母并用下划线分隔,如total_sum、user_name。
• 常量使用全大写字母,并用下划线分隔,如MAX_SIZE。
• 类名使用首字母大写的驼峰命名法,如MyClass。
2. 避免使用可变默认参数
Python中的函数参数是按引用传递的,如果使用可变对象(如列表、字典等)作为默认参数,可能会导致意想不到的结果。
建议将默认参数设为None,在函数内部初始化。
def add_item(item, items=None):
if items is None:
items = []
items.append(item)
return items
3. 注重代码的可读性
• Python代码应尽量清晰、简洁,避免复杂的嵌套,使用空行和适当的注释。
• 适当使用空行分隔不同逻辑块,增加可读性。
4. 理解浅拷贝和深拷贝
使用copy模块的copy()和deepcopy()区分浅拷贝与深拷贝。
浅拷贝会复制对象本身,而深拷贝会递归复制所有嵌套的对象。
import copy
list1 = [1, [2, 3]]
list2 = copy.copy(list1) # 浅拷贝
list3 = copy.deepcopy(list1) # 深拷贝
5. 用is判断None
检查一个变量是否为None,推荐使用is而不是==,避免潜在的意外行为。
if my_var is None:
print("my_var is None")
6. 条件表达式中的and和or短路
and和or在Python中是短路求值,and在第一个条件为假时停止,or在第一个条件为真时停止。
利用短路特性可以优化代码,减少不必要的计算。
a = None
b = "Hello"
result = a or b # 返回 "Hello",因为a为None
7. 理解迭代器与生成器
使用生成器(yield关键字)可以节省内存,特别适合大数据处理或无限序列。
生成器函数不会一次性生成所有数据,而是按需生成,减少内存占用。
def count_up_to(n):
count = 1
while count <= n:
yield count
count += 1
for number in count_up_to(5):
print(number)
8. 避免过多的嵌套
• 嵌套过深会影响代码的可读性,建议用早返回、合并条件等方式简化逻辑。
不推荐
if condition1:
if condition2:
if condition3:
do_something()
推荐
if not condition1 or not condition2 or not condition3:
return
do_something()
9. 使用列表推导式提升效率
列表推导式能简化代码、提高可读性,但要避免过于复杂的推导式,保持代码清晰。
numbers = [1, 2, 3, 4, 5]
squares = [x**2 for x in numbers if x > 2]
10. 使用上下文管理器(with语句)
with语句自动管理资源的释放,适用于文件操作、数据库连接等。
with open("file.txt", "r") as f:
content = f.read()
离开with块后文件自动关闭
11. 避免捕获所有异常
捕获异常时,尽量指定异常类型,不要直接用except:或except Exception:
这样能避免意外捕获其他异常,导致问题难以排查。
try:
result = 1 / 0
except ZeroDivisionError:
print("Cannot divide by zero")
12. 使用合适的数据结构
• 根据数据类型和操作需求选择合适的数据结构,Python提供列表、集合、字典、元组等多种结构。
• 例如,若数据无重复需求,用集合set;若要频繁查找元素,用字典dict。
13. 避免在循环内重复计算
• 在循环中避免重复计算相同的值,可以提前计算并保存,提高效率。
不推荐
for _ in range(len(my_list)):
do_something(len(my_list))
推荐
list_length = len(my_list)
for _ in range(list_length):
do_something(list_length)
14. 用enumerate和zip提升循环效率
enumerate函数为循环提供索引,而zip可以同步遍历多个序列。
names = ["Alice", "Bob", "Charlie"]
for index, name in enumerate(names):
print(index, name)
list1 = [1, 2, 3]
list2 = ["a", "b", "c"]
for a, b in zip(list1, list2):
print(a, b)
15. 避免滥用全局变量
• 全局变量会增加代码的耦合性,使得函数的行为不易预测,推荐使用局部变量。
16. 使用f字符串
f字符串是Python 3.6后推荐的格式化字符串方式,效率更高且更简洁。
name = "Alice"
age = 25
print(f"My name is {name} and I'm {age} years old")
17. 合理使用注释和文档字符串
为复杂的代码逻辑添加注释,保持代码易于理解。
使用三重引号(""")为模块、类、函数添加文档字符串,以便自动生成文档或帮助信息。
def add(a, b):
"""
This function adds two numbers.
Parameters:
a (int): The first number.
b (int): The second number.
Returns:
int: The sum of a and b.
"""
return a + b
18. Python中的“真”与“假”
• 在Python中,0、空字符串、空列表、空字典、None等都被视为假值。
• 判断是否为空时,直接使用if not my_list而不是if len(my_list) == 0。
19. 尽量用any和all简化判断
any和all函数用于检查序列中是否存在任一项或全部项为真。
values = [0, 1, 2]
if any(values): # 只要有一个非零值就为True
print("At least one true value")
if all(values): # 全部非零才为True
print("All values are true")
20. 避免无意义的列表创建
• 使用生成器表达式代替不必要的列表创建,可以节省内存。
推荐
sum(x * x for x in range(10))
不推荐
sum([x * x for x in range(10)])
21. 合理使用断言(assert)
• 断言用于在开发和调试中捕获逻辑错误,而不是替代异常处理。
• 在发布代码时可以通过禁用断言提升性能,避免在生产环境中使用。
def calculate_square(n):
assert n >= 0, "Number must be non-negative"
return n * n
加油吧!卷卷卷