欢迎光临
我们一直在努力

Python 从入门到进阶:基础篇——语法精讲、数据结构、函数与实战【解释器、字典、列表推导式、异常处理、文件读写】

✍️ 作者:王文峰(外号:神秘小峯 / 山峯)|中国国学、传统文化与代码爱好者的程序人生,期待你的关注和支持!

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王大师王天师》,外号:神秘小峯 / 山峯 🏮 中国国学、传统文化与代码爱好者的程序人生,期待你的关注和支持! 🔗 转载说明:务必注明来源(注明:作者:王文峰哦)

赞(0)
未经允许不得转载:171主机测评 » Python 从入门到进阶:基础篇——语法精讲、数据结构、函数与实战【解释器、字典、列表推导式、异常处理、文件读写】
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址