Skip to content

第 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
pause

macOS / 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
101

15.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 --oneline

Q6:学完这份笔记,下一个动作是什么? 回去第 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 章 · 本组首页见「内容」列表。

试图用自己的方式,重新定义属于我的人生