一、Python 环境搭建与入门
1.1 安装 Python
-
官网下载 :访问 Python 官网,根据系统(Windows/macOS/Linux)下载对应版本(建议选择 3.8+ 稳定版)
-
验证安装 :
bashpython --version # 或 python3 --version
1.2 开发工具选择
| 工具 | 特点 | 推荐场景 |
|---|---|---|
| IDLE | Python 自带轻量级 IDE | 写小脚本、快速验证 |
| VS Code | 微软开源,插件丰富 | 强烈推荐,适合绝大多数开发者 |
| PyCharm | JetBrains 专业 IDE | 大型项目开发(社区版免费) |
1.3 第一个 Python 程序
创建 hello.py:
python
# 这是一行注释(用 # 开头)
print("Hello, Python!") # 输出语句
运行:
bash
python hello.py
输出结果:
Hello, Python!
二、变量与数据类型
2.1 变量的本质与命名规则
变量:内存中存储数据的"容器",通过变量名访问数据。
命名规则:
- 只能包含字母、数字、下划线(
_),且不能以数字开头 - 区分大小写 (
Name和name是不同变量) - 不能使用 Python 关键字(如
if、for、def等) - 建议遵循 snake_case (如
user_name),类名使用 大驼峰 (如StudentInfo)
2.2 基础数据类型
Python 内置 6 种基础数据类型,可通过 type() 函数查看:
| 类型 | 描述 | 示例 |
|---|---|---|
int |
整数,支持任意大整数 | 5, -3, 1000 |
float |
浮点数(双精度) | 3.14, -2.5 |
bool |
布尔值 | True, False |
str |
字符串 | 'hello', "Python" |
NoneType |
空值 | x = None |
complex |
复数 | 3+4j |
2.3 字符串进阶操作
2.3.1 字符串拼接与格式化
python
name = "张三"
age = 20
# 方式1:+ 拼接(需转换非字符串类型)
info = "姓名:" + name + ",年龄:" + str(age)
# 方式2:f-string(Python 3.6+ 推荐,自动转换类型)
info = f"姓名:{name},年龄:{age}"
# 方式3:format() 方法
print("姓名:{},分数:{}".format("李四", 95))
# 方式4:% 格式化(旧语法)
print("圆周率:%.2f" % 3.14159) # 输出:圆周率:3.14
2.3.2 字符串常用方法
| 方法 | 功能 | 示例 |
|---|---|---|
len(s) |
返回长度 | len("abc") → 3 |
s.upper() |
转大写 | "hello".upper() → "HELLO" |
s.lower() |
转小写 | "WORLD".lower() → "world" |
s.strip() |
去除首尾空格 | " test ".strip() → "test" |
s.split(sep) |
按分隔符分割 | "a,b,c".split(",") → ["a","b","c"] |
s.replace(old, new) |
替换 | "apple".replace("a", "A") → "Apple" |
s.startswith() |
判断是否以某字符串开头 | "hello".startswith("he") → True |
s.endswith() |
判断是否以某字符串结尾 | "hello".endswith("lo") → True |
三、运算符与表达式
3.1 算术运算符
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
+ |
加法 | 5 + 3 |
8 |
- |
减法 | 7 - 2 |
5 |
* |
乘法 | 4 * 6 |
24 |
/ |
除法(浮点) | 10 / 3 |
3.333... |
// |
整除 | 10 // 3 |
3 |
% |
取余 | 10 % 3 |
1 |
** |
幂运算 | 2 ** 3 |
8 |
3.2 比较运算符
返回布尔值(True/False):
| 运算符 | 描述 |
|---|---|
== |
等于 |
!= |
不等于 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
3.3 逻辑运算符
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
and |
逻辑与(全真为真) | (5 > 3) and (2 < 4) |
True |
or |
逻辑或(有真为真) | (5 < 3) or (2 > 4) |
False |
not |
逻辑非(取反) | not (5 == 3) |
True |
3.4 成员与身份运算符
python
# 成员运算符
"a" in "abc" # True
"d" not in "abc" # True
# 身份运算符(判断内存地址是否相同)
a = [1, 2]
b = [1, 2]
a is b # False(不同对象)
a == b # True(值相等)
四、流程控制:条件与循环
4.1 条件语句(if-elif-else)
python
score = 85
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 60:
print("及格")
else:
print("不及格")
三元运算符(条件表达式):
python
status = "成年" if age >= 18 else "未成年"
4.2 循环语句
4.2.1 for 循环
python
# 遍历列表
fruits = ["苹果", "香蕉", "橘子"]
for fruit in fruits:
print(fruit)
# 遍历字符串
for char in "Python":
print(char)
# 遍历字典
person = {"name": "张三", "age": 20}
for key, value in person.items():
print(f"{key}: {value}")
# range() 生成数字序列
for i in range(5): # 0, 1, 2, 3, 4
print(i)
4.2.2 while 循环
python
count = 0
while count < 5:
print(f"当前计数:{count}")
count += 1
4.3 循环控制语句
| 关键字 | 作用 |
|---|---|
break |
终止当前循环,跳出循环体 |
continue |
跳过当前迭代,进入下一次循环 |
else |
循环正常结束 后执行(被 break 终止则不执行) |
python
# 示例:寻找第一个偶数
numbers = [1, 3, 5, 7, 8, 9]
for num in numbers:
if num % 2 == 0:
print(f"找到偶数:{num}")
break
else:
print("未找到偶数") # 若循环未被 break 则执行
五、函数:代码复用的核心
5.1 函数定义与调用
python
def 函数名(参数1, 参数2=默认值):
"""函数文档字符串(说明功能、参数、返回值)"""
代码块
return 返回值 # 可选,无 return 则返回 None
5.2 参数类型
5.2.1 位置参数(必传)
python
def add(a, b):
return a + b
add(3, 5) # 输出 8
5.2.2 默认参数(可选)
python
def greet(name, msg="早上好"):
print(f"{name},{msg}!")
greet("张三") # 张三,早上好!
greet("李四", "晚上好") # 李四,晚上好!
5.2.3 可变参数(*args)
接收任意数量的位置参数,存储为元组:
python
def sum_numbers(*args):
return sum(args)
sum_numbers(1, 2, 3, 4) # 输出 10
5.2.4 关键字参数(**kwargs)
接收任意数量的键值对参数,存储为字典:
python
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="张三", age=20, city="北京")
5.3 lambda 表达式(匿名函数)
用于快速定义简单函数:
python
# 普通函数
def square(x):
return x ** 2
# lambda 等价写法
square = lambda x: x ** 2
print(square(5)) # 输出 25
# 结合函数式编程
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers)) # [1, 4, 9, 16, 25]
# 使用 lambda 排序
users = [{"name": "张三", "age": 30}, {"name": "李四", "age": 25}]
sorted_users = sorted(users, key=lambda user: user["age"])
六、数据结构:列表、元组、字典、集合
6.1 列表(list):有序可变容器
python
nums = [1, 2, 3]
| 操作 | 示例 | 结果 |
|---|---|---|
| 索引访问 | nums[0] |
1 |
| 切片 | nums[1:3] |
[2, 3] |
| 修改元素 | nums[0] = 10 |
[10, 2, 3] |
| 末尾添加 | nums.append(4) |
[10, 2, 3, 4] |
| 指定位置插入 | nums.insert(1, 9) |
[10, 9, 2, 3, 4] |
| 删除(按值) | nums.remove(9) |
[10, 2, 3, 4] |
| 删除(按索引) | nums.pop(0) |
[2, 3, 4] |
| 排序 | nums.sort() |
升序排列 |
| 反转 | nums.reverse() |
反转列表 |
列表推导式(高效生成列表):
python
# 生成 0-9 的平方列表
squares = [x**2 for x in range(10)] # [0, 1, 4, 9, ..., 81]
# 筛选偶数的平方
even_squares = [x**2 for x in range(10) if x % 2 == 0] # [0, 4, 16, 36, 64]
# 嵌套列表转平面列表
matrix = [[1, 2], [3, 4], [5, 6]]
flattened = [num for row in matrix for num in row] # [1, 2, 3, 4, 5, 6]
6.2 元组(tuple):有序不可变容器
python
t = (1, "a", True)
# t[0] = 2 # 报错:TypeError,元素不可修改
# 单元素元组需要逗号
single = (42,) # 元组
not_tuple = (42) # 整数
# 元组解包
coordinates = (10, 20)
x, y = coordinates # x=10, y=20
6.3 字典(dict):键值对映射
python
person = {"name": "张三", "age": 20}
| 操作 | 示例 | 结果 |
|---|---|---|
| 访问值 | person["name"] |
"张三" |
| 安全访问 | person.get("email", "未设置") |
"未设置" |
| 添加/修改 | person["age"] = 26 |
更新值 |
| 删除 | del person["age"] |
删除键值对 |
| 获取所有键 | person.keys() |
dict_keys(['name']) |
| 获取所有值 | person.values() |
dict_values(['张三']) |
| 获取键值对 | person.items() |
dict_items([('name', '张三')]) |
字典推导式:
python
# 生成字母与其 ASCII 码的字典
ascii_dict = {char: ord(char) for char in "abc"} # {'a': 97, 'b': 98, 'c': 99}
6.4 集合(set):无序唯一元素容器
python
s1 = {1, 2, 3}
s2 = {2, 3, 4}
# 交集
print(s1 & s2) # {2, 3}
# 并集
print(s1 | s2) # {1, 2, 3, 4}
# 差集
print(s1 - s2) # {1}
七、异常处理:让程序更健壮
7.1 异常捕获(try-except)
python
try:
num = int(input("请输入一个整数:"))
result = 10 / num
print(f"结果是:{result}")
except ValueError:
print("输入无效,请输入整数!")
except ZeroDivisionError:
print("不能除以零!")
except Exception as e:
print(f"发生错误:{e}")
finally:
print("无论是否异常,都会执行(常用于资源释放)")
7.2 自定义异常
python
class AgeError(Exception):
def __init__(self, message):
super().__init__(message)
def check_age(age):
if age < 0:
raise AgeError("年龄不能为负数!")
elif age > 150:
raise AgeError("年龄不合理!")
try:
check_age(-5)
except AgeError as e:
print(e) # 年龄不能为负数!
八、模块与包:代码组织的艺术
8.1 导入模块的方式
python
# 方式1:导入整个模块
import math
print(math.sqrt(16)) # 4.0
# 方式2:导入指定函数
from math import sqrt
print(sqrt(16)) # 4.0
# 方式3:重命名模块
import numpy as np
# 方式4:导入多个函数
from math import sin, cos, tan
8.2 包(Package)
包是包含多个模块的文件夹,需创建 __init__.py 文件(可空)标识为包:
my_package/
├── __init__.py
├── module1.py
└── module2.py
8.3 模块搜索路径
- 当前目录
- 环境变量
PYTHONPATH中的路径 - Python 安装的默认库路径(如
site-packages)
九、文件操作:数据的持久化
9.1 文件打开模式
| 模式 | 描述 |
|---|---|
r |
只读(默认),文件不存在报错 |
w |
只写(覆盖),不存在则创建 |
a |
追加写,不存在则创建 |
r+ |
读写(从开头开始) |
w+ |
读写(覆盖原有内容) |
a+ |
读写(追加到末尾) |
b |
二进制模式(如 rb, wb) |
9.2 文件读写示例
python
# 写入文件(覆盖模式)
with open("demo.txt", "w", encoding="utf-8") as f:
f.write("Hello\n")
f.write("Python\n")
# 读取文件(逐行读取,内存友好)
with open("demo.txt", "r", encoding="utf-8") as f:
for line in f:
print(line.strip()) # strip() 移除行尾换行符
9.3 CSV 文件处理
python
import csv
# 写入 CSV
with open("users.csv", "w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow(["姓名", "年龄", "城市"])
writer.writerow(["张三", 25, "北京"])
# 读取 CSV
with open("users.csv", "r", encoding="utf-8") as file:
reader = csv.DictReader(file)
for row in reader:
print(f"{row['姓名']} 来自 {row['城市']}")
9.4 文件路径处理(pathlib)
python
from pathlib import Path
path = Path("data") / "users.txt" # 自动处理路径分隔符
if not path.exists():
path.parent.mkdir(parents=True)
十、面向对象编程(OOP)
10.1 类与对象
python
class Person:
# 类属性(所有实例共享)
species = "人类"
# 构造方法(初始化实例属性)
def __init__(self, name, age):
self.name = name # 实例属性
self.age = age
# 实例方法
def introduce(self):
print(f"我是{self.name},{self.age}岁,属于{self.species}。")
# 创建对象(实例化)
p1 = Person("张三", 20)
p1.introduce() # 我是张三,20岁,属于人类。
10.2 继承与多态
python
# 父类(基类)
class Animal:
def __init__(self, name):
self.name = name
def make_sound(self):
raise NotImplementedError("子类必须实现此方法")
# 子类(派生类)
class Dog(Animal):
def make_sound(self):
return "汪汪!"
class Cat(Animal):
def make_sound(self):
return "喵喵~"
# 多态示例
def animal_speak(animal):
print(f"{animal.name} 说:{animal.make_sound()}")
dog = Dog("旺财")
cat = Cat("咪咪")
animal_speak(dog) # 旺财 说:汪汪!
animal_speak(cat) # 咪咪 说:喵喵~
10.3 封装与访问控制
python
class Account:
def __init__(self, balance):
self.__balance = balance # 私有属性(双下划线)
self._owner = "张三" # 保护属性(单下划线,约定不直接访问)
def get_balance(self):
return self.__balance # 公有方法访问私有属性
acc = Account(1000)
# print(acc.__balance) # 报错:AttributeError
print(acc.get_balance()) # 1000
十一、30个实用技巧速查
1-5:基础数据类型技巧
python
# 1. 多变量赋值
x, y, z = 1, 2, 3
# 2. 交换变量值(无需临时变量)
a, b = 5, 10
a, b = b, a # a=10, b=5
# 3. 常量约定(Python 无真正常量)
MAX_USERS = 100 # 全大写表示不应修改
# 4. 链式比较
if 1 < x < 10: # 等价于 x > 1 and x < 10
# 5. 布尔值转换规则
print(bool(0)) # False
print(bool(1)) # True
print(bool("")) # False
print(bool("text")) # True
6-10:数据结构技巧
python
# 6. 列表切片高级用法
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
last_three = nums[-3:] # [7, 8, 9]
reversed_list = nums[::-1] # 反转
every_second = nums[::2] # [0, 2, 4, 6, 8]
# 7. 字典 get 方法(安全访问)
email = user.get("email", "未设置") # 键不存在返回默认值
# 8. 集合去重
numbers = [1, 2, 2, 3, 3, 3]
unique = list(set(numbers)) # [1, 2, 3]
# 9. 元组解包
r, g, b = (255, 0, 0)
# 10. 枚举遍历(获取索引和值)
for index, value in enumerate(["a", "b", "c"]):
print(index, value)
11-15:控制流技巧
python
# 11. for-else 结构(循环正常完成时执行)
for i in range(3):
print(i)
else:
print("循环正常完成,未被 break")
# 12. 条件表达式(三元运算符)
status = "成年" if age >= 18 else "未成年"
# 13. 真值判断(非空即真)
name = ""
if not name: # 空字符串视为 False
print("名字未设置")
# 14. 字典推导式
square_dict = {n: n**2 for n in range(5) if n % 2 == 0}
# 15. 同时遍历多个列表
names = ["张三", "李四"]
ages = [20, 25]
for name, age in zip(names, ages):
print(f"{name}: {age}")
16-20:函数技巧
python
# 16. 多返回值(实际是返回元组)
def get_dimensions(width, height):
return width * height, 2 * (width + height)
area, perimeter = get_dimensions(5, 3)
# 17. 函数文档字符串
def greet(name):
"""向指定的人问好"""
return f"你好,{name}!"
# 18. 全局变量修改
count = 0
def increment():
global count
count += 1
# 19. 参数类型提示(Python 3.5+)
def add(a: int, b: int) -> int:
return a + b
# 20. 装饰器基础
import functools
def my_decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
print("调用前")
result = func(*args, **kwargs)
print("调用后")
return result
return wrapper
21-25:文件与异常技巧
python
# 21. with 语句自动管理资源
with open("file.txt", "r", encoding="utf-8") as f:
content = f.read()
# 22. 捕获多个异常
except (FileNotFoundError, PermissionError) as e:
print(f"文件错误:{e}")
# 23. 抛出异常
def validate_age(age):
if age < 0:
raise ValueError("年龄不能为负数")
# 24. 自定义异常类
class ValidationError(Exception):
pass
# 25. 使用 pathlib 处理路径
from pathlib import Path
path = Path.home() / "documents" / "file.txt"
26-30:模块与OOP技巧
python
# 26. 导入模块别名
import datetime as dt
from math import sqrt as square_root
# 27. 检查对象类型
print(isinstance(dog, Animal)) # True
print(type(dog).__name__) # "Dog"
# 28. 类属性和实例属性
class Config:
version = "1.0" # 类属性(共享)
def __init__(self):
self.name = "实例属性"
# 29. 类方法 vs 静态方法
class MyClass:
@classmethod
def class_method(cls):
pass
@staticmethod
def static_method():
pass
# 30. 魔术方法(双下划线方法)
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other): # 重载 + 运算符
return Vector(self.x + other.x, self.y + other.y)
def __str__(self): # 自定义字符串表示
return f"Vector({self.x}, {self.y})"
学习建议
- 多敲代码:每学一个知识点,立刻动手编写示例并调试,不要只看不练
- 善用官方文档 :熟练后多查阅 Python 官方文档,学习标准库
- 参与项目实践:从简单项目(如学生信息管理系统、爬虫、数据分析)开始巩固
- 理解"Pythonic":遵循 PEP 8 规范,写出简洁优雅的代码
- 建立知识体系:将零散知识点串联,形成完整的知识网络
结语:Python 的魅力在于其简洁与强大。本文系统梳理了从入门到进阶的核心知识点,但"纸上得来终觉浅",唯有持续实践,方能真正掌握这门语言。愿你在 Python 编程之路上越走越远!