Python 学习笔记
返回首页
技术分享
2025-12-20
Python 学习笔记
基础语法
注释
# 单行注释
"""
多行注释
可以写多行内容
"""
'''
也是多行注释
'''
变量命名规则
# 合法的变量名
name = "张三"
user_name = "user123"
_private_var = "私有变量"
$special = "特殊变量" # 不推荐
# 非法变量名
# 2name = "错误" # 不能数字开头
# user name = "错误" # 不能有空格
# class = "错误" # 不能使用关键字
数据类型
# 基本数据类型
text = "Hello World" # 字符串 str
number = 42 # 整数 int
pi = 3.14159 # 浮点数 float
is_true = True # 布尔值 bool
empty_value = None # 空值 NoneType
# 检查数据类型
print(type(text)) # <class 'str'>
print(type(number)) # <class 'int'>
print(type(is_true)) # <class 'bool'>
print(type(empty_value)) # <class 'NoneType'>
字符串操作
# 字符串创建
single_quote = '单引号字符串'
double_quote = "双引号字符串"
multi_line = """多行
字符串"""
# 字符串操作
text = "Hello World"
print(len(text)) # 11 - 字符串长度
print(text[0]) # H - 索引访问(从0开始)
print(text[-1]) # d - 负索引
print(text[0:5]) # Hello - 切片
print(text.lower()) # hello world - 转小写
print(text.upper()) # HELLO WORLD - 转大写
print(text.replace("World", "Python")) # Hello Python
# 字符串格式化
name = "张三"
age = 25
# 1. % 占位符(旧式)
print("姓名:%s,年龄:%d" % (name, age))
# 2. format 方法
print("姓名:{0},年龄:{1}".format(name, age))
print("姓名:{name},年龄:{age}".format(name=name, age=age))
# 3. f-string(推荐)
print(f"姓名:{name},年龄:{age}")
print(f"年龄:{age:.2f}") # 保留两位小数
数字运算
# 基本运算
a, b = 10, 3
print(a + b) # 13 - 加法
print(a - b) # 7 - 减法
print(a * b) # 30 - 乘法
print(a / b) # 3.333... - 除法
print(a // b) # 3 - 整除
print(a % b) # 1 - 取余
print(a ** b) # 1000 - 幂运算
# 数学函数
import math
print(math.pi) # 3.14159...
print(math.sqrt(16)) # 4.0 - 平方根
print(math.ceil(3.2)) # 4 - 向上取整
print(math.floor(3.8)) # 3 - 向下取整
print(round(3.6)) # 4 - 四舍五入
布尔运算
# 逻辑运算符
x, y = True, False
print(x and y) # False - 逻辑与
print(x or y) # True - 逻辑或
print(not x) # False - 逻辑非
# 比较运算符
a, b = 10, 20
print(a == b) # False - 等于
print(a != b) # True - 不等于
print(a > b) # False - 大于
print(a < b) # True - 小于
print(a >= b) # False - 大于等于
print(a <= b) # True - 小于等于
数据结构
列表 (List)
# 创建列表
fruits = ["苹果", "香蕉", "橙子"]
numbers = [1, 2, 3, 4, 5]
mixed = ["文本", 123, True, None]
# 列表操作
fruits.append("葡萄") # 末尾添加元素
fruits.insert(1, "草莓") # 指定位置插入
fruits.remove("香蕉") # 删除指定元素
popped = fruits.pop() # 删除并返回末尾元素
fruits.clear() # 清空列表
# 列表访问
print(fruits[0]) # 第一个元素
print(fruits[-1]) # 最后一个元素
print(fruits[1:3]) # 切片
# 列表方法
print(len(fruits)) # 列表长度
print(max(numbers)) # 最大值
print(min(numbers)) # 最小值
print(sum(numbers)) # 求和
sorted_list = sorted(numbers) # 排序(不改变原列表)
numbers.sort() # 原地排序
numbers.reverse() # 反转列表
# 列表推导式
squares = [x**2 for x in range(10)]
evens = [x for x in range(10) if x % 2 == 0]
元组 (Tuple)
# 创建元组
coordinates = (10, 20)
single_element = (42,) # 单元素元组需要逗号
empty_tuple = ()
# 元组特性
# 元组不可变,不能添加、删除或修改元素
print(coordinates[0]) # 10 - 访问元素
print(coordinates[1:3]) # 切片
# 元组方法
print(len(coordinates)) # 长度
print(coordinates.count(10)) # 元素出现次数
print(coordinates.index(20)) # 元素索引
# 元组解包
x, y = coordinates
print(x, y) # 10 20
字典 (Dictionary)
# 创建字典
student = {
"name": "张三",
"age": 20,
"major": "计算机科学"
}
# 字典操作
student["grade"] = "大三" # 添加键值对
student["age"] = 21 # 更新值
del student["major"] # 删除键值对
# 访问字典
print(student["name"]) # 张三
print(student.get("name")) # 张三(更安全)
print(student.get("phone", "未知")) # 未知(默认值)
# 字典方法
print(student.keys()) # 所有键
print(student.values()) # 所有值
print(student.items()) # 所有键值对
print("name" in student) # True - 检查键是否存在
print(student.pop("age")) # 删除并返回值
student.clear() # 清空字典
# 字典推导式
squares = {x: x**2 for x in range(5)}
集合 (Set)
# 创建集合
numbers = {1, 2, 3, 4, 5}
letters = set("hello") # {'h', 'e', 'l', 'o'}
# 集合操作
numbers.add(6) # 添加元素
numbers.remove(1) # 删除元素
numbers.discard(99) # 安全删除(不存在也不报错)
# 集合运算
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1 | set2) # 并集 {1, 2, 3, 4, 5}
print(set1 & set2) # 交集 {3}
print(set1 - set2) # 差集 {1, 2}
print(set1 ^ set2) # 对称差集 {1, 2, 4, 5}
控制流程
条件语句
# if-elif-else
score = 85
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 60:
print("及格")
else:
print("不及格")
# 条件表达式(三元运算符)
result = "及格" if score >= 60 else "不及格"
print(result)
# 嵌套条件
age = 20
has_license = True
if age >= 18:
if has_license:
print("可以开车")
else:
print("需要先考驾照")
else:
print("年龄不够")
循环语句
# for 循环
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
print(f"我喜欢{fruit}")
# range() 函数
for i in range(5): # 0, 1, 2, 3, 4
print(i)
for i in range(1, 6): # 1, 2, 3, 4, 5
print(i)
for i in range(0, 10, 2): # 0, 2, 4, 6, 8
print(i)
# while 循环
count = 0
while count < 5:
print(f"计数:{count}")
count += 1
# 循环控制
for i in range(10):
if i == 3:
continue # 跳过本次循环
if i == 7:
break # 终止循环
print(i)
# pass 语句(占位符)
for i in range(5):
if i == 2:
pass # 什么都不做,占位
else:
print(i)
循环进阶
# enumerate() - 获取索引和值
fruits = ["苹果", "香蕉", "橙子"]
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
# zip() - 同时遍历多个序列
names = ["张三", "李四", "王五"]
ages = [20, 25, 30]
for name, age in zip(names, ages):
print(f"{name} 今年 {age} 岁")
# 列表推导式与循环
squares = []
for i in range(10):
squares.append(i ** 2)
print(squares)
# 等价于列表推导式
squares = [i ** 2 for i in range(10)]
print(squares)
函数
函数定义与调用
# 基本函数定义
def greet():
print("Hello, World!")
# 带参数的函数
def greet_person(name):
print(f"Hello, {name}!")
# 带返回值的函数
def add(a, b):
return a + b
# 带默认参数的函数
def greet_with_title(name, title="先生"):
return f"你好,{name}{title}"
# 函数调用
greet() # Hello, World!
greet_person("张三") # Hello, 张三!
result = add(5, 3) # 8
print(greet_with_title("李四")) # 你好,李四先生
print(greet_with_title("王五", "女士")) # 你好,王五女士
函数参数
# 位置参数
def describe_person(name, age, city):
return f"{name},{age}岁,来自{city}"
# 关键字参数
result = describe_person(age=25, name="张三", city="北京")
# 可变参数
def sum_all(*numbers):
return sum(numbers)
print(sum_all(1, 2, 3, 4, 5)) # 15
# 关键字可变参数
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="张三", age=25, city="北京")
作用域
# 局部变量和全局变量
global_var = "全局变量"
def test_scope():
local_var = "局部变量"
print(global_var) # 可以访问全局变量
# print(local_var) # 外部无法访问局部变量
def modify_global():
global global_var # 声明要修改全局变量
global_var = "修改后的全局变量"
test_scope()
print(global_var)
modify_global()
print(global_var) # "修改后的全局变量"
高阶函数
# 函数作为参数
def apply_operation(func, x, y):
return func(x, y)
def multiply(a, b):
return a * b
result = apply_operation(multiply, 5, 3) # 15
# 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]
evens = list(filter(lambda x: x % 2 == 0, numbers)) # [2, 4]
模块和包
导入模块
# 1. 导入整个模块
import math
print(math.sqrt(16))
# 2. 导入特定函数
from math import sqrt, pi
print(sqrt(25))
print(pi)
# 3. 导入所有函数(不推荐)
from math import *
print(sin(0))
# 4. 给模块起别名
import numpy as np
import pandas as pd
# 5. 给函数起别名
from math import sqrt as square_root
print(square_root(36))
常用内置模块
# math 模块
import math
print(math.pi) # 3.14159...
print(math.factorial(5)) # 120
# random 模块
import random
print(random.randint(1, 10)) # 1-10 随机整数
print(random.choice(["A", "B", "C"])) # 随机选择
random.shuffle([1, 2, 3, 4, 5]) # 打乱列表
# datetime 模块
from datetime import datetime, date, timedelta
now = datetime.now()
print(now.strftime("%Y-%m-%d %H:%M:%S"))
today = date.today()
yesterday = today - timedelta(days=1)
print(yesterday)
# os 模块
import os
print(os.getcwd()) # 当前工作目录
print(os.listdir(".")) # 当前目录文件列表
# json 模块
import json
data = {"name": "张三", "age": 25}
json_str = json.dumps(data) # 转为JSON字符串
parsed_data = json.loads(json_str) # 解析JSON
第三方包管理
# 安装包
pip install numpy
pip install pandas matplotlib
# 安装特定版本
pip install numpy==1.21.0
# 从文件安装
pip install -r requirements.txt
# 卸载包
pip uninstall numpy
# 查看已安装包
pip list
pip freeze
# 升级包
pip install --upgrade numpy
文件操作
基本文件读写
# 读取文件
# 方法1:使用 with 语句(推荐)
with open("example.txt", "r", encoding="utf-8") as file:
content = file.read()
print(content)
# 方法2:手动打开和关闭
file = open("example.txt", "r", encoding="utf-8")
content = file.read()
file.close()
# 逐行读取
with open("example.txt", "r", encoding="utf-8") as file:
for line in file:
print(line.strip()) # 去除换行符
# 读取所有行
with open("example.txt", "r", encoding="utf-8") as file:
lines = file.readlines()
print(lines)
写入文件
# 写入文件(覆盖模式)
with open("output.txt", "w", encoding="utf-8") as file:
file.write("Hello, World!\n")
file.write("这是第二行\n")
# 追加模式
with open("output.txt", "a", encoding="utf-8") as file:
file.write("这是追加的内容\n")
# 写入多行
lines = ["第一行\n", "第二行\n", "第三行\n"]
with open("output.txt", "w", encoding="utf-8") as file:
file.writelines(lines)
文件模式
# 文件打开模式
"""
'r' - 只读(默认)
'w' - 写入(覆盖已存在文件)
'a' - 追加(在文件末尾添加)
'r+' - 读写
'b' - 二进制模式(如 'rb', 'wb')
't' - 文本模式(默认)
"""
文件和目录操作
import os
import shutil
# 检查文件是否存在
if os.path.exists("example.txt"):
print("文件存在")
# 检查是否为文件/目录
print(os.path.isfile("example.txt"))
print(os.path.isdir("my_folder"))
# 创建目录
os.makedirs("my_folder/subfolder", exist_ok=True)
# 删除文件
os.remove("example.txt")
# 删除目录
os.rmdir("empty_folder") # 只能删除空目录
shutil.rmtree("folder_with_files") # 删除非空目录
# 复制文件
shutil.copy("source.txt", "destination.txt")
# 移动/重命名文件
os.rename("old_name.txt", "new_name.txt")
异常处理
基本异常处理
# try-except 基本结构
try:
num = int(input("请输入一个数字: "))
result = 10 / num
print(f"结果是: {result}")
except ValueError:
print("输入的不是有效数字")
except ZeroDivisionError:
print("不能除以零")
except Exception as e:
print(f"发生了其他错误: {e}")
# try-except-else-finally
try:
file = open("example.txt", "r", encoding="utf-8")
content = file.read()
except FileNotFoundError:
print("文件不存在")
except Exception as e:
print(f"读取文件时出错: {e}")
else:
print("文件读取成功")
print(content)
finally:
if 'file' in locals():
file.close()
print("清理工作完成")
自定义异常
# 自定义异常类
class CustomError(Exception):
def __init__(self, message):
self.message = message
super().__init__(self.message)
def validate_age(age):
if age < 0:
raise CustomError("年龄不能为负数")
if age > 150:
raise CustomError("年龄不能超过150")
return True
try:
validate_age(-5)
except CustomError as e:
print(f"验证错误: {e}")
断言
# 断言用于调试和测试
def divide(a, b):
assert b != 0, "除数不能为零"
return a / b
# 启用断言检查
def calculate_discount(price, discount_rate):
assert 0 <= discount_rate <= 1, "折扣率必须在0到1之间"
assert price >= 0, "价格不能为负数"
return price * (1 - discount_rate)
# 在生产环境中可以禁用断言
# python -O script.py # -O 参数会禁用断言
以上就是本篇文章的全部内容。如果您有任何问题或建议,欢迎在评论区留言讨论。