NOTE目录骨架来自菜鸟教程 Python3 基础章节,表述与细节对照 Python 官方文档 与相关 PEP 核对。基于 Python 3。完整出处见文末 参考。
编码
Python 3 把源文件默认当成 UTF-8:字符串、注释、标识符都可以写非 ASCII。官方教程 也提醒:标准库标识符只用 ASCII,要可移植就跟这个约定走。
一般不用写编码声明。若必须指定别的编码,声明必须单独占一行,出现在文件第一行;若第一行是 shebang,则放在第二行(PEP 263):
#!/usr/bin/env python3# -*- coding: utf-8 -*-coding: name 或 coding=name 两种写法都可以,编码名必须是 Python 认得的 codec。
Unix 上若希望 ./script.py 直接执行,shebang 用 env 在 PATH 里找解释器,比写死路径稳。用 python script.py 调用时,shebang 会被忽略。1
标识符
词法规则见 Lexical analysis:本质是 Unicode 的 XID_Start / XID_Continue,再加 _。入门可以记成:
- 不能以数字开头。
- 大小写敏感:
count和Count不是同一个名字。 - 不要用保留关键字当名字。可用
keyword.iskeyword()判断。2 - Unicode 标识符合法(中文、
π),日常仍用英文。
age = 25user_name = "Alice"_total = 100 # 单下划线:约定「内部使用」(PEP 8)MAX_SIZE = 1024 # 全大写:约定常量(PEP 8)不合法:2nd_place、user-name、class、$price。
PEP 8:变量 / 函数 snake_case,类名 PascalCase。双下划线开头(如 __private)会触发名称改写,先别自己造这种名字。
注释
# 到行末是注释,字符串字面量里面的 # 不算。3
# 整行注释print("Hello, Python!") # 行尾注释三引号 ''' / """ 是字符串,不是注释语法。不赋给变量、不当 Docstring 时,求值后丢掉,看起来像「多行注释」。它不能嵌套;块里要补充说明用 #。
'''这段不会执行。# 可以在里面写单行注释'''print("Hello, Python!")文档字符串
PEP 257:模块、类、函数(含方法)体中第一条语句若是字符串,解释器会把它存进 __doc__。推荐用 """,即使只有一行也用三引号。放在第一句之后就只是普通字符串,__doc__ 为 None。
def add(a, b): """返回两数之和。""" return a + b
print(add.__doc__) # 返回两数之和。help(add) # 交互环境里可看说明,q 退出多行 Docstring 写参数、返回值、异常。项目里选定一种风格(Google / NumPy / reST)并保持即可。
行、缩进与代码组
缩进决定语句分组,不用 {}。PEP 8 规定用 4 个空格,不要 Tab 和空格混用(混用会 TabError)。对不齐则 IndentationError。
if True: print("True")else: print("False")if / while / for / def / class 以关键字开头、冒号 : 结尾,后面缩进的语句是 suite。复合语句 需要空块时用 pass。
空行不是语法,解释器不靠它分组。PEP 8 建议顶层函数、类之间空两行,方法之间空一行。
同一物理行写多句可用分号 ;,PEP 8 不推荐当习惯。
多行语句
显式续行:行末 \(字符串、注释里除外)。
total = item_one + \ item_two + \ item_three隐式续行:括号 ()、[]、{} 内换行不必加 \,括号内还可以写注释。这是更常见的写法:
total = [ "item_one", "item_two", # 可以注释 "item_three",]解释器:两种跑法
官方说明见 Using the Python Interpreter。
交互式
输入 python3(Windows 上常见的是 py 启动器)。主提示符 >>>,续行 ...。Unix 用 Ctrl+D、Windows 用 Ctrl+Z 结束,或输入 quit()。
$ python3>>> print("Hello, Python!")Hello, Python!脚本式
python3 hello.py另外两种常用启动方式:python -c "print(1)" 执行一句;python -m 模块名 把模块当脚本跑(例如 python -m venv .venv、python -m pip install …)。-h 看全部开关。脚本自己的参数在 sys.argv。
Windows 的 cmd 里不要把文档里的 $ 一起敲进去。
最小输出
print(*objects, sep=' ', end='\n') 默认换行、参数之间空一格。同一行接着打用 end;多值换分隔符用 sep(见 print):
x = "a"y = "b"print(x)print(y)print(x, end=" ")print(y, end=" ")print()print(1, 2, 3, sep="@") # 1@2@3aba b1@2@3input("提示") 会阻塞等回车。用别人的库之前要先 import。
附录:保留关键字
以本机解释器为准(keyword):
import keywordprint(keyword.kwlist)print(keyword.iskeyword("class")) # True按用途归类(便于扫一眼,不是官方分组):
| 类别 | 关键字 |
|---|---|
| 值 | True False None |
| 逻辑 | and or not is in |
| 条件 | if elif else |
| 循环 | for while break continue |
| 异常 | try except finally raise assert |
| 函数 | def return lambda yield pass |
| 类 | class del |
| 模块 | import from as |
| 作用域 | global nonlocal |
| 异步 | async await |
| 资源 | with |
3.9 起还有 soft keyword(如 match / case / type),只在特定语法位置保留,可用 keyword.issoftkeyword() / keyword.softkwlist 查看。
del 既是关键字,也是删除语句:可解绑名字、删属性、删切片。
参考
官方文档(中文版 可对照阅读):
- Using the Python Interpreter — 交互 / 脚本、源文件编码、shebang 与编码声明的位置
- Lexical analysis — 编码声明、注释、显式/隐式续行、缩进、标识符与关键字
- Compound statements — 冒号与 suite
- keyword —
kwlist/iskeyword/ soft keyword - print()
- Unicode HOWTO — 源码 UTF-8 与编码声明
PEP:
- PEP 8 — Style Guide — 4 空格缩进、命名
- PEP 257 — Docstring Conventions
- PEP 263 — Defining Python Source Code Encodings
目录来源(骨架,不以它为准改语法):