← 返回知识宇宙
基础课程·入门

Python 基础教程 · 10 分钟上手实操课

面向零基础初学者的 Python 实操教程,10 分钟从安装运行开始,讲解变量与数据结构、函数与模块、文件 I/O 与异常处理,最后实战完成 CSV 数据分析小工具。

知识编号27
关系轨道5
学习难度入门
Python编程入门入门教程数据结构函数文件处理异常处理CSV数据分析命令行
抖音

视频讲解

Python 基础教程 · 10 分钟上手实操课

视频时长:10 分钟 | 平台:YouTube | 目标观众:零基础初学者 这是一份实操驱动的录播脚本,每一句讲解都紧跟一次真实的终端演示。请按章节顺序录制,确保观众每 10–20 秒都能看到屏幕上的变化。


开场 Hook(0:00 – 0:20)

【镜头:紧贴终端光标,黑色背景】

【旁白】

Python 是全球最受欢迎的编程语言之一,从谷歌、Instagram 到 NASA 都在用它。 它能写网站、做数据分析、自动化办公、甚至驱动人工智能模型——这些场景你今天都会看到一点。 Python 的设计哲学是"代码应该像英语一样好读",所以同样一个功能,Python 往往只需要其他语言 1/3 的代码量。 学习曲线平缓,生态极其丰富,是初学者进入编程世界最友好的入口之一。 接下来的 10 分钟,我会带你从一行代码写起,到一个完整的小项目结束。我们直接开始。


第一章 · 第一次运行 Python(0:20 – 2:20)

章节介绍

Python 是一门解释型、动态类型的高级语言——你不用管内存,不用声明变量类型,写完就能直接运行。这种"开箱即用"的特性让它的开发反馈非常快,非常适合初学者。

这一章我们完成三件事:确认环境、用交互模式写第一行代码、把代码保存成 .py 文件运行。


Demo 1.1 · 检查 Python 是否已安装

Screen

打开 macOS 的 Terminal(macOS/Linux)或 PowerShell(Windows)。屏幕中央是光标闪烁的命令行。

Command

python3 --version

Output

Python 3.12.4

Narration

我们先确认一下 Python 装好了没有。注意一定要写 python3——很多系统同时装了 Python 2 和 Python 3,Python 2 已经在 2020 年停止维护了,我们只用 3。看到版本号就说明一切就绪。


Demo 1.2 · 用交互模式当计算器

Screen

终端里继续敲命令。输入后立即回车,下方立刻出现结果。

Command

python3

Output

Python 3.12.4 (main, ...)
Type "help", "copyright", "credits" or "license" for more information.
>>>

Narration

输入 python3 之后,我们进入了 Python 的交互模式——你写一行,它立刻执行一行。这个 >>> 就是提示符。你可以把它当成一个超级计算器。


Demo 1.3 · 写第一行代码

Screen

光标停在 >>> 后面,我们开始输入。

Command

print("Hello, Python!")
2 + 3
print("I'm", 25, "years old")

Output

Hello, Python!
5
I'm 25 years old

Narration

print() 是 Python 里第一个要认识的函数——它的作用就是把东西打印到屏幕上。 你看,我可以直接算 2 + 3,Python 立刻告诉我答案是 5。 第二个 print 我把字符串和数字混在一起传进去,Python 自动用空格把它们拼起来。这就是动态类型的好处——你不用告诉 Python 哪些是字符串、哪些是数字,它自己会判断。 我们用 exit() 退出交互模式。


Demo 1.4 · 把代码写进文件再运行

Screen

退出交互模式后,我们新建一个文件。先用 cd 切到桌面,新建一个 python_demo 文件夹。

Command

cd ~/Desktop
mkdir python_demo
cd python_demo
touch hello.py
ls

Output

hello.py

Narration

交互模式适合做实验,但真正的代码要存在文件里。我们创建一个 hello.py——Python 文件的约定后缀就是 .py。 注意 cd 是切换目录,mkdir 创建文件夹,touch 创建空文件,ls 查看当前目录的内容。这是所有写代码的人每天都要用的几个命令。


Demo 1.5 · 用 echo 写入第一段脚本

Screen

我们用 cat 命令直接把代码写进 hello.py。

Command

cat > hello.py << 'EOF'
name = "Python"
print(f"Hello, {name}!")
print("2 + 3 =", 2 + 3)
EOF
cat hello.py

Output

name = "Python"
print(f"Hello, {name}!")
print("2 + 3 =", 2 + 3)

Narration

这里用了一个小技巧:cat > 文件 << 'EOF' 让我们从终端直接往文件里写多行内容,写完用 EOF 结束。 注意那个 f"Hello, {name}!"——这是 Python 的f-string,在字符串前面加一个 f,就能用大括号直接嵌入变量,比传统的拼接方式清爽多了。


Demo 1.6 · 运行脚本

Screen

在终端输入运行命令,光标跳到下一行,结果立刻出现。

Command

python3 hello.py

Output

Hello, Python!
2 + 3 = 5

Narration

python3 hello.py 这一行命令的意思是:用 Python 解释器去执行 hello.py 这个文件。 看,输出和我们在交互模式里看到的一模一样。这就是 Python 最朴素的开发循环:写文件 → 运行 → 看结果。 第一章结束,我们已经能跑 Python 了。


第一章小结

Key Takeaway:Python 的开发循环是"写文件 → python3 文件名 → 看输出",没有编译、没有复杂的工程配置。

Practical Use Case:日常学习、写小工具、做数据探索时,绝大多数人都用这种最简单的文件 + 命令行的方式。

Transition:接下来我们要把数据存起来、并且组织好——第二章讲变量和数据结构。


第二章 · 变量与数据结构(2:20 – 4:40)

章节介绍

数据本身没有价值,被组织起来的数据才有价值。这一章我们认识 Python 内置的四大容器:列表、元组、字典、集合,以及 Python 最优雅的语法糖——列表推导式。


Demo 2.1 · 变量赋值

Screen

继续在终端里,进入 Python 交互模式。

Command

python3

Output

>>>

Narration

重新进入交互模式。这次我们玩数据。


Command

age = 25
name = "小明"
pi = 3.14159
is_student = True
print(type(age), type(name), type(pi), type(is_student))

Output

<class 'int'> <class 'str'> <class 'float'> <class 'bool'>

Narration

在 Python 里,= 不是"等于",是赋值——把右边的值装进左边这个变量。 你看,我写了四个变量,但完全没声明类型。type() 函数告诉我们:age 是整数,name 是字符串,pi 是浮点数,is_student 是布尔值。 这是动态类型——Python 自己会根据赋的值决定类型,省掉了大量样板代码。


Demo 2.2 · 列表:最常用的容器

Screen

继续在交互模式。

Command

fruits = ["苹果", "香蕉", "橙子"]
fruits.append("葡萄")
fruits[0]
fruits[-1]
len(fruits)

Output

['苹果', '香蕉', '橙子', '葡萄']
'苹果'
'葡萄'
4

Narration

方括号 [] 定义的就是列表——有序、可改、可重复。 append() 在末尾加一个;fruits[0] 取第一个元素;fruits[-1] 取最后一个——负数索引是从后往前数;len() 拿到长度。 这是 Python 里出场率最高的数据结构,没有之一。


Demo 2.3 · 字典:用名字取数据

Screen

继续。

Command

user = {"name": "小明", "age": 25, "city": "北京"}
user["name"]
user.get("email", "未填写")
user["age"] = 26
user

Output

'小明'
'未填写'
{'name': '小明', 'age': 26, 'city': '北京'}
}

Narration

花括号 {} 配合键值对,就是字典——你不再用位置(第几个)取数据,而是用"名字"取。 当你不知道某个键存不存在时,用 .get() 而不是 []——后者会直接报错,前者可以给一个默认值。 修改值只要重新赋值就行。这跟列表、字典的本质是一样的:Python 里所有东西都是对象,操作它们都靠方法。


Demo 2.4 · 集合:自动去重

Screen

继续。

Command

nums = [1, 2, 2, 3, 3, 3, 4]
unique = set(nums)
unique
"苹果" in unique

Output

{1, 2, 3, 4}
False

Narration

集合用 set() 创建,最大的特点就是去重——同样元素只留一个。 而且 in 判断在集合里是 O(1) 的速度,比列表快得多。要快速判断某个东西存不存在,用集合;要保留顺序,用列表。


Demo 2.5 · 列表推导式:一行搞定循环

Screen

继续。

Command

squares = [x ** 2 for x in range(10) if x % 2 == 0]
squares

Output

[0, 4, 16, 36, 64]

Narration

这一行是 Python 最优雅的语法之一——列表推导式。 从 0 到 9 里挑出偶数,每个数算平方,放进列表。 读法是:[对每个 x 做什么 for x in 范围 if 条件]。 它把"遍历 + 筛选 + 转换"压成一行。但记住,超过 2 层嵌套就该拆成普通循环,否则反而不易读。


第二章小结

Key Takeaway:列表管顺序、字典管键值、集合管去重、列表推导式管"一行做完循环"——选对容器,代码量少一半。

Practical Use Case:处理 JSON 数据、写爬虫、做数据分析时,这四个数据结构是 90% 场景的主力。

Transition:数据有了,下一步要把"重复的逻辑"封装起来——第三章讲函数和模块。


第三章 · 函数与模块(4:40 – 6:40)

章节介绍

复制粘贴是万恶之源。函数让你"给一段代码起个名字",模块让你"把相关函数放进同一个文件"。这一章我们写第一个自己的工具。


Demo 3.1 · 定义第一个函数

Screen

退出交互模式,新建一个文件。

Command

exit()
cat > utils.py << 'EOF'
def greet(name: str, greeting: str = "你好") -> str:
    return f"{greeting},{name}!"

print(greet("小明"))
print(greet("小红", "欢迎"))
EOF
python3 utils.py

Output

你好,小明!
欢迎,小红!

Narration

def 关键字定义函数,圆括号里是参数,return 返回结果。 注意 greeting: str = "你好"——这是带默认值的参数。调用时不传就用默认值,传了就用你的。 那个 -> str 是类型提示,不影响运行,但 IDE 和读者能一眼看出应该返回什么类型——非常推荐写上。


Demo 3.2 · 用 import 加载模块

Screen

继续在同一文件里加内容。

Command

cat >> utils.py << 'EOF'

import math
import random

print("圆周率是", math.pi)
print("随机选一个幸运儿:", random.choice(["小明", "小红", "小刚"]))
EOF
python3 utils.py

Output

你好,小明!
欢迎,小红!
圆周率是 3.141592653589793
随机选一个幸运儿: 小红

Narration

import 把别人写好的模块加载进来。Python 自带了标准库,math 做数学、random 生成随机数、datetime 处理时间——这些都是开箱即用。 看到 math.pi 这种写法了吗?模块名 + 点 + 函数名,这就是命名空间,避免名字冲突。 永远不要写 from module import *——你不知道哪些名字进了你的代码库,会非常难调试。


Demo 3.3 · 拆成两个文件:自制模块

Screen

新建第二个文件 app.py,让 app.py 引用 utils.py。

Command

cat > app.py << 'EOF'
from utils import greet

def main():
    users = ["小明", "小红", "小刚"]
    for u in users:
        print(greet(u, "晚上好"))

main()
EOF
ls
python3 app.py

Output

app.py
utils.py
晚上好,小明!
晚上好,小红!
晚上好,小刚!

Narration

现在我们有两个文件:utils.py 装着通用函数,app.py 是主程序。 from utils import greet 的意思是:从 utils 模块里只把 greet 这一项拿出来用。 模块就是 .py 文件,没有黑魔法。Python 看到 import 就去同目录找,找到就把那个文件执行一遍,把里面的函数、变量给你用。 注意——文件名 utils.py 千万别和标准库冲突,否则会被你自己的文件覆盖掉。


Demo 3.4 · 默认参数陷阱

Screen

回到交互模式演示一个常见 bug。

Command

python3

Output

>>>

Command

def add_item(item, bucket=[]):
    bucket.append(item)
    return bucket

print(add_item("苹果"))
print(add_item("香蕉"))
print(add_item("橘子", []))

Output

['苹果']
['苹果', '香蕉']
['橘子']

Narration

注意看!我连续两次调用 add_item,第一次返回 ['苹果'],第二次变成了 ['苹果', '香蕉']——坑就这么埋下了。 这是 Python 最经典的陷阱之一:默认参数只在函数定义时创建一次。那个空列表被所有调用共享。 正确写法是把默认值设成 None,在函数内部再初始化。

Command

def add_item(item, bucket=None):
    if bucket is None:
        bucket = []
    bucket.append(item)
    return bucket

Output

(定义成功,无输出)

Narration

把默认参数改成 None,再用 if 初始化——这是Python 圈里人人都该会的肌肉记忆。


第三章小结

Key Takeaway:def 定义函数,import 加载模块——这两个词是 Python 工程化的起点。

Practical Use Case:写工具脚本、做后端服务、做数据处理流水线,函数和模块都是最基本的组织单位。

Transition:程序现在能写、能跑、能复用——但还缺少两件事:记忆(文件)和韧性(异常处理)。


第四章 · 文件 I/O 与异常处理(6:40 – 8:30)

章节介绍

程序运行在内存里,关掉就没了。要让数据"活下来",得写到文件。同时,真实世界充满意外——文件不存在、权限不够、网络断了——异常处理就是程序的保险。


Demo 4.1 · 写入文件

Screen

退出交互模式,新建一个文件。

Command

exit()
cat > diary.py << 'EOF'
from datetime import datetime

entry = input("写一句今天的心情:")
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

with open("diary.txt", "a", encoding="utf-8") as f:
    f.write(f"[{timestamp}] {entry}\n")

print("已保存到 diary.txt")
EOF
python3 diary.py

Output

写一句今天的心情:今天学完了 Python 基础!
已保存到 diary.txt

Narration

input() 让程序停下来等你输入。datetime.now() 拿到当前时间。 重点是 with open(...) as f——with 语句会自动在代码块结束时关闭文件,哪怕中间出错了也会关。 "a" 是追加模式(append),每次写都接着上次的内容往下加,不会覆盖。


Demo 4.2 · 读取并显示全部日记

Screen

再跑一次刚才的脚本,录入第二条;然后我们写一段读取的代码。

Command

echo "今天学了 Python 基础!" | python3 diary.py
cat > read_diary.py << 'EOF'
with open("diary.txt", "r", encoding="utf-8") as f:
    print(f.read())
EOF
python3 read_diary.py

Output

[2026-07-06 14:23:01] 今天学了 Python 基础!

Narration

"r" 是读取模式,f.read() 一次性读出全部内容。 注意 encoding="utf-8"——不加这一行,中文会乱码。这是个新手必踩的坑。


Demo 4.3 · 处理文件不存在的异常

Screen

新建一段演示异常处理的脚本。

Command

cat > safe_read.py << 'EOF'
filename = input("要读取哪个文件?")
try:
    with open(filename, "r", encoding="utf-8") as f:
        content = f.read()
        print(f"读取到 {len(content)} 个字符")
except FileNotFoundError:
    print(f"❌ 文件 {filename} 不存在")
except PermissionError:
    print(f"❌ 没有权限读取 {filename}")
EOF
echo "不存在的.txt" | python3 safe_read.py
echo "diary.txt" | python3 safe_read.py

Output

❌ 文件 不存在的.txt 不存在
读取到 65 个字符

Narration

try / except 是 Python 的异常处理——试着做,出错就走备用方案。 注意我写的是 except FileNotFoundError——指定具体错误类型。永远不要写裸的 except:——它会把 Ctrl+C 也吞掉,让你连程序都停不下来。 第一种情况文件不存在,触发 FileNotFoundError;第二种正常读到内容。这就是程序的韧性。


第四章小结

Key Takeaway:with 管资源开关,try/except 管意外——这两个写在一起,你的程序就能在真实世界稳定运行。

Practical Use Case:任何要读取配置文件、解析日志、抓取网络数据的脚本,都需要这套组合拳。

Transition:四个基础概念我们都学完了——接下来把它们组合起来,做一个完整的小项目。


第五章 · 实战项目:CSV 数据分析小工具(8:30 – 9:40)

项目介绍

我们要做一个真实可用的小工具:读取一个 CSV 销售数据文件,统计每个产品的总销售额和平均价格,并把报告写回一个新的文件。 这个项目会把第一章到第四章的所有概念串起来:变量与字典存数据、函数封装逻辑、文件 I/O 读写、异常处理兜底。


Demo 5.1 · 准备测试数据

Screen

我们先创建一个 sales.csv 模拟销售数据。

Command

cat > sales.csv << 'EOF'
product,price,quantity
苹果,5.5,100
香蕉,3.2,150
橙子,4.8,80
苹果,5.5,50
香蕉,3.2,200
EOF
cat sales.csv

Output

product,price,quantity
苹果,5.5,100
香蕉,3.2,150
橙子,4.8,80
苹果,5.5,50
香蕉,3.2,200

Narration

这就是一个普通的 CSV 文件:每行一条记录,逗号分隔字段。 我们的任务是:把相同产品的销售额加起来,算平均价格,输出报告。


Demo 5.2 · 写分析脚本

Screen

创建 analyze.py。

Command

cat > analyze.py << 'EOF'
from collections import defaultdict

def load_sales(path: str) -> list[dict]:
    """读取 CSV,返回 [{'product': ..., 'price': ..., 'quantity': ...}, ...]"""
    rows = []
    with open(path, "r", encoding="utf-8") as f:
        header = f.readline().strip().split(",")
        for line in f:
            values = line.strip().split(",")
            row = dict(zip(header, values))
            row["price"] = float(row["price"])
            row["quantity"] = int(row["quantity"])
            rows.append(row)
    return rows

def summarize(rows: list[dict]) -> dict:
    """按产品汇总:总销售额、总销量、平均价"""
    summary = defaultdict(lambda: {"qty": 0, "revenue": 0.0})
    for r in rows:
        summary[r["product"]]["qty"] += r["quantity"]
        summary[r["product"]]["revenue"] += r["price"] * r["quantity"]
    return {
        product: {
            "qty": data["qty"],
            "revenue": round(data["revenue"], 2),
            "avg_price": round(data["revenue"] / data["qty"], 2),
        }
        for product, data in summary.items()
    }

def save_report(summary: dict, path: str) -> None:
    """把报告写回文件"""
    with open(path, "w", encoding="utf-8") as f:
        f.write("product,quantity,revenue,avg_price\n")
        for product, data in summary.items():
            f.write(f"{product},{data['qty']},{data['revenue']},{data['avg_price']}\n")

def main():
    try:
        rows = load_sales("sales.csv")
        report = summarize(rows)
        save_report(report, "report.csv")
        print(f"✅ 分析完成,共 {len(report)} 个产品,报告已写入 report.csv")
        for product, data in report.items():
            print(f"  - {product}: 销量 {data['qty']}, 销售额 {data['revenue']}, 均价 {data['avg_price']}")
    except FileNotFoundError:
        print("❌ 找不到 sales.csv,请先准备数据文件")

if __name__ == "__main__":
    main()
EOF
python3 analyze.py

Output

✅ 分析完成,共 3 个产品,报告已写入 report.csv
  - 苹果: 销量 150, 销售额 825.0, 均价 5.5
  - 香蕉: 销量 350, 销售额 1120.0, 均价 3.2
  - 橙子: 销量 80, 销售额 384.0, 均价 4.8

Narration

看,这个 50 行的脚本用到了我们学过的所有东西: 文件 I/O——with open(...) 读写 CSV; 数据结构——列表存原始行、字典存单行、嵌套字典存汇总; 函数与模块——load_sales / summarize / save_report / main 四个函数各司其职; 异常处理——try / except FileNotFoundError 兜底; 列表推导式与 f-string——把字典优雅地转成字符串。 defaultdict 是标准库的小神器——你不用先判断 key 存不存在,第一次访问它会自动创建默认值。 if __name__ == "__main__": 的意思是:只有直接运行这个文件时才执行 main,被别人 import 时不执行——这是写可复用模块的标准姿势。


Demo 5.3 · 验证报告文件

Screen

看一眼生成的文件。

Command

cat report.csv

Output

product,quantity,revenue,avg_price
苹果,150,825.0,5.5
香蕉,350,1120.0,3.2
橙子,80,384.0,4.8

Narration

文件写出来了,结构和原始数据对齐,可以直接用 Excel 打开,或者喂给别的程序继续处理。 这个项目虽然小,但已经是一个真实可用的迷你工具——你把它换成公司真实的销售数据、客户日志、考试成绩,立刻就能跑。


课程收尾(9:40 – 10:00)

我们学到了什么

我们从一行 print("Hello, Python!") 开始,走到了写一个完整的 CSV 数据分析工具。

中间我们掌握了:

你现在能做什么

你不再只是"读懂 Python 的人",而是能写出能跑、能复用、能扛住异常的小工具的人。 你可以写自动化脚本批量改文件、爬网页抓数据、做 Excel 报表、写小后台服务——这些都是 Python 真实世界的常见用法。

下一步学什么

编程不是看完视频就会的——写一行,跑一行,比看十遍教程都有用。 今天的脚本和示例数据都在视频简介里,下载下来自己跑一遍、改造一遍,你就真正跨进了 Python 世界。 我们下期见。


录制备注(给后期 / 剪辑)

实践示例

后续与前置知识

引用此知识点

更多基础课程知识