✍️ 作者:王文峰(外号:神秘小峯 / 山峯)|中国国学、传统文化与代码爱好者的程序人生,期待你的关注和支持!
Python 从入门到进阶:基础篇
-
- 一、开篇:为什么是 Python
- 二、语法精讲:变量、类型、流程控制
-
- 1. 动态类型与常用类型
- 2. 运算符的 Python 味儿
- 3. 流程控制(缩进就是语法!)
- 4. 字符串常用操作
- 三、数据结构:四大容器怎么选
-
- 1. 列表:增删改查 + 推导式
- 2. 字典:日常使用率第一
- 3. 元组与集合
- 四、函数与模块:把代码组织起来
-
- 1. 函数定义与参数四式
- 2. Lambda 与常用高阶函数
- 3. 模块与包:代码的复用之道
- 4. 面向对象一分钟版
- 五、异常处理与文件读写
-
- 1. try/except 家族
- 2. 文件操作:with 是王道
- 六、实战:日志报错统计脚本
- 七、避坑清单(新手与老手都踩过)
- 八、总结与自测清单
- 🎯 学习教程(传送门)
- 🔥 往期文章

📚 本文是「从入门到进阶」Python 系列第一篇。2026 年,Python 已经是AI 时代的通用语:写爬虫、做自动化、搞数据分析、接大模型,全都要它。这篇把语法、数据结构、函数与模块三块基本功一次讲透,所有代码都能直接复制运行,零基础也能跟上。

一、开篇:为什么是 Python
| 语法极简 | 完成同样的功能,代码量通常是 Java 的 1/3~1/5 |
| 解释执行 | 不用编译,保存即运行,改起来飞快 |
| 生态无敌 | 数据(pandas)、AI(PyTorch)、Web(Django/FastAPI)、自动化(requests)应有尽有 |
| 胶水语言 | 调 C/C++ 库无压力,到处都能嵌一脚 |
环境准备:官网下载 Python 3.x(建议 3.10+),勾选 “Add to PATH”,然后验证:
python –version # Python 3.x.x
pip –version # 包管理器,装库全靠它:pip install requests
编辑器推荐 VS Code + Python 插件 或 PyCharm Community(免费够用)。
二、语法精讲:变量、类型、流程控制
1. 动态类型与常用类型
Python 不用声明类型,变量是"标签贴在对象上":
# -*- coding: utf-8 -*-
name = "王文峰" # str
age = 18 # int(支持大整数,不会溢出)
height = 1.78 # float
is_vip = True # bool(注意大写 T/B)
nothing = None # NoneType,等于"无"
print(type(age), type(name)) # <class 'int'> <class 'str'>
print(name * 3) # 字符串可以直接乘:重复 3 遍
print("我叫%s,今年%d岁" % (name, age)) # %格式化(老式)
print(f"我叫{name},今年{age}岁") # f-string(Python 3.6+,首选)
2. 运算符的 Python 味儿
print(7 / 2) # 3.5 —— / 永远是浮点除法
print(7 // 2) # 3 —— // 才是整除
print(7 % 3) # 1 —— 取模
print(2 ** 10) # 1024 —— 幂运算,比 pow 顺手
a, b = 1, 2
a, b = b, a # 交换变量,一行搞定(Java 同学表示羡慕)
print(a, b)
# 链式比较:Python 独有的爽
x = 5
print(0 < x < 10) # True
3. 流程控制(缩进就是语法!)
# ① if / elif / else —— 注意冒号 + 缩进(4 空格)
score = 85
if score >= 90:
level = "优秀"
elif score >= 60:
level = "及格"
else:
level = "不及格"
print(level)
# ② for 循环 —— 遍历容器的主力
fruits = ["苹果", "香蕉", "橘子"]
for f in fruits:
print(f)
for i in range(1, 10, 2): # 1,3,5,7,9(左闭右开!)
print(i, end=" ") # end=" " 不换行
# ③ while 循环 + break/continue
n = 0
while n < 100:
n += 1 # 没有 n++,只有 +=
if n % 2 == 0:
continue # 跳过偶数
if n > 10:
break # 跳出循环
print(n) # 11
⚠️ 缩进是 Python 的命根子:同一层级必须对齐,推荐 4 空格,别混用 Tab 和空格。
4. 字符串常用操作
s = " Python,好用! "
print(s.strip()) # 去首尾空格:"Python,好用!"
print(s.strip().replace("!", "。")) # 替换
print("Py" in s) # 子串判断:True(in 比 Java 的 contains 直观)
print(s.strip().split(",")) # 切分:['Python', '好用!']
print("-".join(["a", "b", "c"])) # 拼接:a-b-c
print(s.strip()[:6]) # 切片截取前 6 位(切片语法 [start:end:step])
print(s.strip().upper()) # 转大写
💡 切片 [start:end:step] 是 Python 的杀手锏:s[::-1] 直接字符串反转,s[::2] 隔一取一,必须掌握。
三、数据结构:四大容器怎么选
| list 列表 | 有序、可变、可重复 | 队列、栈、动态数组 |
| tuple 元组 | 有序、不可变 | 固定数据、函数多返回值、字典的键 |
| dict 字典 | 键值对、O(1) 查找 | 计数、配置、JSON 处理 |
| set 集合 | 无重复、自动去重 | 去重、交并差运算 |
1. 列表:增删改查 + 推导式
lst = [3, 1, 4, 1, 5]
lst.append(9) # 尾部追加
lst.insert(0, 0) # 指定位置插入
lst.remove(1) # 删除首个指定值
last = lst.pop() # 弹出尾部并返回
lst[0] = 99 # 修改
print(lst, len(lst)) # 长度 len() 是万能的
lst.sort(reverse=True) # 降序排序(就地排序)
print(sorted(lst)) # 返回新排序列表,原列表不动
# ⭐ 列表推导式:Python 的灵魂语法,一行生成列表
squares = [x * x for x in range(1, 6)]
evens = [x for x in range(10) if x % 2 == 0]
print(squares, evens)
2. 字典:日常使用率第一
user = {"name": "王文峰", "age": 18}
user["city"] = "北京" # 新增
user["age"] = 19 # 修改
print(user.get("phone", "未填写")) # 取值带默认,**不用 get 会 KeyError**
for k, v in user.items(): # 遍历键值对
print(f"{k} = {v}")
print("name" in user) # 判断键是否存在(in 是成员运算符)
# 去重计数神器
words = ["java", "python", "java", "go", "python"]
from collections import Counter
print(Counter(words)) # Counter({'java': 2, 'python': 2, 'go': 1})
3. 元组与集合
point = (3, 4) # 元组:不可改,适合当"常量"
print(point[0])
# point[0] = 10 # 反例!TypeError: 不可变
a = {1, 2, 2, 3} # 集合:自动去重
b = {2, 3, 4}
print(a & b, a | b, a – b) # 交集 {2,3}、并集、差集
四、函数与模块:把代码组织起来
1. 函数定义与参数四式
def greet(name, greeting="你好", *args, **kwargs):
"""文档字符串:函数说明,用 help(greet) 可查看"""
msg = f"{greeting},{name}!"
print("额外位置参数:", args)
print("额外关键字参数:", kwargs)
return msg
# ① 普通调用 ② 关键字调用(顺序随意)③ 默认值 ④ 可变参数
print(greet("王文峰"))
print(greet("山峯", greeting="hello", city="北京", hobby="代码"))
| name | 位置参数 |
| greeting="你好" | 默认参数(默认值别用可变对象!) |
| *args | 多余位置参数,收成元组 |
| **kwargs | 多余关键字参数,收成字典 |
| def f(*, x) | * 之后必须用关键字传参 |
2. Lambda 与常用高阶函数
nums = [5, 2, 9, 1]
print(sorted(nums, key=lambda x: –x)) # lambda 匿名函数:按降序排
print(list(map(lambda x: x * 2, nums))) # map:逐个映射
print(list(filter(lambda x: x > 2, nums))) # filter:过滤
from functools import reduce
print(reduce(lambda a, b: a + b, nums)) # 累加归约:17
3. 模块与包:代码的复用之道
# my_util.py —— 自己写的模块
def safe_div(a, b):
try:
return a / b
except ZeroDivisionError:
return None
# main.py —— 导入使用
import my_util # 整体导入
from my_util import safe_div # 按需导入(推荐)
import os.path as op # 起别名
print(safe_div(10, 2)) # 5.0
print(os.getcwd()) # 当前工作目录
- 第三方库用 pip install requests 安装,pip freeze > requirements.txt 团队共享;
- 养成习惯:每个项目一个虚拟环境——python -m venv venv,激活后互不污染。
4. 面向对象一分钟版
class Student:
def __init__(self, name, score): # 构造方法(self 相当于 this,必须第一个参数)
self.name = name
self.score = score
def __str__(self): # print 时的显示方式
return f"{self.name}({self.score}分)"
@property # 把方法伪装成属性
def level(self):
return "优秀" if self.score >= 90 else "普通"
s = Student("王文峰", 95)
print(s, s.level)
五、异常处理与文件读写
1. try/except 家族
try:
data = int("abc")
1 / 0
except ValueError as e: # 精确捕获,别裸 except 全吞
print("值错误:", e)
except ZeroDivisionError as e:
print("除零错误:", e)
except Exception as e: # 兜底(但要记日志,别默默吞)
print("未知错误:", e)
else:
print("没出错才执行")
finally:
print("无论如何都执行(收尾/关闭资源)")
# 主动抛异常
def set_age(age):
if age < 0:
raise ValueError("年龄不能为负")
return age
⚠️ 别写裸 except:——它连 Ctrl+C 中断都能吞掉。精确捕获 + finally 释放资源,是 Python 的标准姿势。
2. 文件操作:with 是王道
# 写文件(自动关闭,不会忘)
scores = {"张三": 90, "李四": 85}
with open("scores.txt", "w", encoding="utf-8") as f: # w 覆盖写,a 追加写
for name, sc in scores.items():
f.write(f"{name},{sc}\\n")
# 读文件(逐行读,省内存)
with open("scores.txt", "r", encoding="utf-8") as f:
for line in f:
name, sc = line.strip().split(",")
print(name, int(sc))
# JSON 处理——和字典无缝互转(做接口开发天天用)
import json
data = {"name": "王文峰", "skills": ["Java", "Python"]}
with open("user.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2) # ensure_ascii=False 中文不转义
with open("user.json", "r", encoding="utf-8") as f:
print(json.load(f)["skills"])
六、实战:日志报错统计脚本
把本篇知识全部串起来——统计目录下日志文件的 ERROR 行数、TOP 关键字,直接可用:
# -*- coding: utf-8 -*-
"""log_stat.py —— 用法:python log_stat.py ./logs"""
import sys
import os
from collections import Counter
from datetime import datetime
def count_errors(log_dir):
"""统计目录下所有 .log 文件的报错行数与关键字频率"""
if not os.path.isdir(log_dir):
raise NotADirectoryError(f"目录不存在:{log_dir}")
total, kw_counter = 0, Counter()
for fname in os.listdir(log_dir):
if not fname.endswith(".log"):
continue
path = os.path.join(log_dir, fname)
try:
with open(path, "r", encoding="utf-8", errors="ignore") as f:
for line in f:
if "ERROR" in line:
total += 1
# 提取 ERROR 后的关键词:如 "ERROR timeout …" 取 timeout
parts = line.strip().split()
if len(parts) > 1:
kw_counter[parts[1]] += 1
except PermissionError:
print(f"[跳过] 无权限读取:{path}")
return total, kw_counter
def main():
log_dir = sys.argv[1] if len(sys.argv) > 1 else "./logs"
try:
total, counter = count_errors(log_dir)
except Exception as e:
print(f"[失败] {datetime.now():%Y–%m–%d %H:%M:%S} {e}")
sys.exit(1) # 非 0 退出码,方便计划任务监控
print(f"[报告] 扫描目录:{log_dir}")
print(f"[报告] ERROR 总数:{total}")
print("[报告] TOP5 关键字:")
for kw, cnt in counter.most_common(5):
print(f" {kw:<20} {cnt} 次")
if __name__ == "__main__":
main()
运行效果:
$ python log_stat.py ./logs
[报告] 扫描目录:./logs
[报告] ERROR 总数:37
[报告] TOP5 关键字:
timeout 18 次
connection 11 次
oom 8 次
代码里藏着四个进阶知识点:sys.argv 命令行参数、os.path 路径处理、Counter.most_common() 频率统计、if __name__ == "__main__" 入口约定(模块被导入时不自动执行)。
七、避坑清单(新手与老手都踩过)
| 中文乱码 | 文件读写乱码 | open 必写 encoding="utf-8" |
| 可变默认参数 | def f(x=[]) 多次调用共享同一个列表 | 默认值用 None,函数内再创建 |
| 裸 except: | 吞掉一切错误连 Ctrl+C 都没反应 | 精确捕获 + 记日志 |
| 深浅拷贝 | b = a 改 b 动 a | import copy,copy.deepcopy |
| 缩进混用 | IndentationError | 全程 4 空格,IDE 统一配置 |
| pip 装到全局 | 项目间库版本打架 | 一律用 venv 虚拟环境 |
| 可变对象当默认值 | 函数"记住"上次的值 | 见第二行,最高频坑 |
八、总结与自测清单
- ✅ 动态类型 + f-string + 缩进语法,Python 的三大门面;
- ✅ / 是浮点除、// 是整除、** 是幂,a, b = b, a 一行交换;
- ✅ 切片 [start:end:step] 必须练到形成肌肉记忆;
- ✅ 四大容器选型:有序可变选 list、键值对选 dict、去重选 set、固定值选 tuple;
- ✅ 列表推导式是 Python 灵魂,一行顶十行;
- ✅ 函数五式:位置、默认、*args、**kwargs、关键字-only;
- ✅ 异常用 try/except/finally 精确捕获,文件用 with 自动关闭;
- ✅ if __name__ == "__main__" 是脚本和模块的分水岭。
下一篇:《进阶篇——装饰器、生成器与上下文管理器》——揭开 Python"优雅"背后的底层机制,敬请关注!
🎯 学习教程(传送门)
| 01 | JAVA | 从入门到进阶的系统知识 | 持续写作中…… |
| 02 | Oracle | 数据库从用法到实战 | 创作中…… |
| 03 | vbs脚本 | 手把手教你做脚本 | 完善中…… |
| 04 | IDEA | 牛逼哄哄的编程利器 | 编写中…… |
| 05 | 面试 | 吐血整理的面试技巧 | 更新中…… |

🔥 往期文章
🧭 精选往期好文,更多请移步 我的博客主页
- 📕 vb 的小脚本解决大问题:基础篇
- 📗 HTML 入门到进阶:语义化标签、表单与多媒体
- 📘 2026 Java+AI 面试题全解析
- 📙 Spring Boot 启动流程源码解析
- 📚 往期文章大全……

👍 点赞 + ⭐ 收藏 + 💬 评论,一键三连走起! 你们的支持,是我持续创作的最大动力~

✨ 以上就是今天的全部内容,关注我,技术之路不迷路!
📖 本人详解 ✍️ 作者:王文峰,参与 CSDN 2020 年度博客之星评选,《Java王大师王天师》,外号:神秘小峯 / 山峯 🏮 中国国学、传统文化与代码爱好者的程序人生,期待你的关注和支持! 🔗 转载说明:务必注明来源(注明:作者:王文峰哦)



