深色模式
第 15 章 · 附录:交互模式技巧、可执行脚本与常见问题
本章补齐官方教程里"第 14 章 交互式编辑和编辑历史""第 16 章 附录"这些边角但实用的内容。先把前面 14 章学完再回来看,不吃力。
15.1 交互模式里的快捷键(能省很多打字)
在 >>> 提示符下,Python 自带的行编辑支持这些键(Windows 命令行、macOS 终端、Linux 都可用):
| 按键 | 作用 |
|---|---|
↑ / ↓ | 翻历史命令(最常用!) |
Ctrl + P / Ctrl + N | 同上(上下翻历史) |
← → Home End | 行内移动光标 |
Ctrl + A / Ctrl + E | 跳到行首 / 行尾 |
Ctrl + W | 删掉光标前一个单词 |
Ctrl + U / Ctrl + K | 删到行首 / 删到行尾 |
Tab | 自动补全(变量名、模块名、属性名) |
Ctrl + L | 清屏(等于 clear / cls) |
Ctrl + C | 中断正在跑的东西 |
Ctrl + D / Ctrl + Z+回车 | 退出(等于 exit()) |
Tab 补全特别好用:
text
>>> import ran<Tab> → 自动补成 random
>>> import random
>>> random.<Tab><Tab> → 把 random 里所有函数列出来提示:macOS 自带 libedit 版解释器的补全行为略有不同;Windows 建议直接用
python自带解释器或IPython。 想要更强补全/语法高亮:pip install ipython,之后敲ipython进入(Python 官方在文档里也推荐它)。
15.2 让脚本能直接跑:shebang 与 python -m
python -c:一行式命令
bash
python -c "print(sum(range(101)))" # 5050适合快速验证一个表达式,不用建文件。
python -m 模块名
把"模块"当脚本运行,标准库和 pip 装的包都能这么用:
bash
python -m http.server 8000 # 起一个本地文件服务器(访问 http://localhost:8000)
python -m json.tool data.json # 格式化打印 JSON
python -m pip list # 第 11 章那个写法,也是这个机制
python -m venv venv让她/他/它双击就能跑(Windows)
最省事的做法:写一个 run.bat 放在脚本旁边:
bat
@echo off
cd /d %~dp0
python main.py
pausemacOS / Linux:shebang + 可执行权限
在脚本第一行加:
python
#!/usr/bin/env python3然后给它执行权限,就能直接 ./main.py 运行:
bash
chmod +x main.py
./main.py(Windows 不认这一行,但加上也无害,跨平台项目通常都写。)
PYTHONSTARTUP:让交互模式自动加载常用导入
新建 ~/.pythonrc.py:
python
import sys, os, json, math, random, datetime
print("常用模块已自动导入 ✅")设置环境变量 PYTHONSTARTUP 指向它(Windows 在"环境变量"里加,macOS/Linux 写进 ~/.zshrc):
bash
export PYTHONSTARTUP=~/.pythonrc.py之后每次进交互模式,这些模块就直接可用了。
15.3 交互模式下的错误处理
交互模式里出错不会退出,只是打印 Traceback 然后回到 >>>。这一点和脚本不同(脚本出错会停在那里)。
text
>>> 1 / 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> print("继续用")
继续用所以:试代码用交互模式最安全,不怕把环境搞坏。
习惯用 _ 接上一个结果:
text
>>> 25 * 4
100
>>> _ + 1
10115.4 定制自己的"常用模块"
在项目里建一个 utils.py,放你反复要用的函数:
python
# utils.py
from pathlib import Path
def read_text(path: str) -> str:
"""读文本,自动尝试 utf-8 / gbk"""
p = Path(path)
try:
return p.read_text(encoding="utf-8")
except UnicodeDecodeError:
return p.read_text(encoding="gbk")
def save_json(data, path: str):
import json
Path(path).write_text(
json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8"
)别的脚本 from utils import read_text 就能用 —— 这就是第 06 章"写自己的模块"的实战价值。
15.5 常见问题 6 则
Q1:一行写多长合适? PEP 8 建议不超过 79 字符;实际写代码放宽到 100–120 也行。太长就换行(用括号包裹后自然换行):
python
total = (first_number
+ second_number
+ third_number)Q2:命名到底怎么取?
| 对象 | 风格 | 例子 |
|---|---|---|
| 变量、函数 | 小写_下划线 | user_name, calc_tax |
| 常量 | 全大写_下划线 | MAX_RETRY |
| 类 | 大驼峰 | BankAccount |
| "内部"用 | 前面加 _ | _cache |
Q3:print 调试太乱怎么办? 用 logging(第 10 章),或者用 rich / loguru(第 11 章的第三方库)。
Q4:为什么别人的代码里有 # type: ignore、-> str? 类型注解 + 类型检查工具(mypy、VS Code 提示)。第 04 章讲过注解,先会用再说。
Q5:要不要一开始就学 Git? 项目超过 200 行、或者你怕改坏,就该学。最少会这四条:
bash
git init
git add .
git commit -m "第一次提交"
git log --onelineQ6:学完这份笔记,下一个动作是什么? 回去第 14 章挑一条线(数据 / 爬虫 / Web / AI),然后做一个自己真的想用的小工具。做出来,比学完十份教程都有用。
15.6 一页速查:把常用命令钉在墙上
bash
python script.py # 运行脚本
python -c "print(1)" # 跑一行代码
python -m http.server 8000 # 起本地文件服务
python -m venv venv # 建虚拟环境
python -m pip install 包名 # 装包
python -m pip freeze > requirements.txt
python -i script.py # 跑完脚本后进入交互模式继续调试python
# 文件与路径
from pathlib import Path
p = Path(__file__).parent / "data.txt"
p.read_text(encoding="utf-8")
p.write_text("hi", encoding="utf-8")
# 时间
from datetime import datetime
datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# JSON
import json
json.dumps(obj, ensure_ascii=False, indent=2)
json.loads(text)回到第 00 章 · 本组首页见「内容」列表。