目录
[四、其他常用规范(PEP 8精选)](#四、其他常用规范(PEP 8精选))
先说关键字:
按使用场景分类。每个都给了**"C语言对照"**,方便快速对号入座。
一、控制流程(和C几乎一样,写法微调)
| Python | 作用 | C语言对照 | python注意 |
|---|---|---|---|
if |
条件判断 | if |
条件不需要括号,后面要加冒号 |
elif |
else if 的缩写 | else if |
Python没有elseif,直接写elif |
else |
否则 | else |
同样加冒号 |
for |
遍历序列/迭代器 | for(;;) |
完全不是C的用法,用于for i in range(10) |
while |
条件循环 | while |
同样不需要括号,加冒号 |
break |
跳出循环 | break |
相同 |
continue |
跳过本轮 | continue |
相同 |
pass |
占位语句 | 无 | C里用空大括号 {},Python里必须写pass |
return |
函数返回 | return |
相同 |
典型差异:
-
C:
for(i=0; i<10; i++) -
Python:
for i in range(10):
二、逻辑与布尔(更接近自然语言)
| Python | 作用 | C语言对照 | python注意 |
|---|---|---|---|
True |
布尔真 | 1 / true |
首字母大写 |
False |
布尔假 | 0 / false |
首字母大写 |
None |
空值/无 | NULL |
不是0,是独立的对象 |
and |
逻辑与 | && |
单词形式 |
or |
逻辑或 | ` | |
not |
逻辑非 | ! |
单词形式 |
is |
身份比较(是否为同一对象) | 指针比较 | 别和 == 搞混 |
in |
成员检查 | 无直接对应 | if x in list: |
初学容易错 :if( a == True) 通常不如 if a: 简洁,Python会自动判断真值。
三、函数与类(定义用关键字)
| Python | 作用 | C语言对照 | python注意 |
|---|---|---|---|
def |
定义函数 | 返回值 函数名() |
不需要声明返回类型 |
class |
定义类 | struct + 函数指针 |
完全不同的OOP实现 |
lambda |
匿名函数 | 函数指针 | 简单的小函数,初学可选 |
global |
声明使用全局变量 | 无直接对应 | C里变量默认就是全局或局部,Python要显式声明 |
nonlocal |
使用外层(非全局)变量 | 无 | 闭包用,初学可跳过 |
C程序员易犯 :
在函数里给全局变量赋值必须写global x,否则Python会认为你在创建局部变量。
四、模块与包(导入代码)
| Python | 作用 | C语言对照 | python注意 |
|---|---|---|---|
import |
导入模块 | #include |
导入的是整个模块,不是头文件 |
from |
从模块导入部分 | 无 | from math import sin |
as |
别名 | typedef 或宏 |
import numpy as np |
思维切换 :C的#include是把头文件内容复制 进来;Python的import是加载并执行模块,然后让你通过模块名访问。
五、异常处理(C里通常用if-errno)
| Python | 作用 | C语言对照 | python注意 |
|---|---|---|---|
try |
尝试执行可能出错的代码 | 无 | 代替C的if(ret<0) |
except |
捕获异常 | 无 | 可以指定异常类型 |
finally |
无论是否异常都执行 | 无 | 类似C的goto cleanup模式 |
raise |
主动抛出异常 | return -1 |
更结构化 |
assert |
断言,条件假则崩溃 | assert() |
调试用,生产可关闭 |
典型模式:
try:
f = open('file.txt')
data = f.read()
except FileNotFoundError:
print('文件不存在')
finally:
f.close()
六、其他实用关键字
| Python | 作用 | C语言对照 | python注意 |
|---|---|---|---|
with |
上下文管理器 | 无 | 自动资源释放,如with open() as f: |
del |
删除变量/元素 | free |
删除引用,不是直接释放内存 |
yield |
生成器 | 无 | 初学可暂缓 |
async/await |
异步编程 | 无 | 初学不要碰 |
with 是C程序员会喜欢的 :不用手动fclose(),比C的defer(GCC扩展)还方便。
七、关键字速查表(初学者需掌握)
必须烂熟于心(20个):
if elif else for while break continue pass
def return import from as
True False None and or not in
稍后掌握(5~8个):
class try except finally raise with global del
暂时不用碰:
lambda yield nonlocal assert async await
八、如何查看所有关键字?
在Python交互式环境里输入:
import keyword
print(keyword.kwlist)
最后提醒一句:Python的关键字不能用作变量名。如果你不小心用了,解释器会直接报语法错误,记住别给变量起名叫class、def、in就行。
从C转过来,你可能会觉得"怎么连switch都没有?"------Python的哲学是"一种场景只给一种明显的做法",if-elif-else足够清晰,而且更灵活。慢慢你会习惯的。
再说书写规范:
从C语言到Python,缩进不再是你"为了方便阅读"而加的,而是语法本身。在C里,花括号位置可以按个人喜好;在Python里,缩进错了程序就崩溃。
下面是初学阶段必须遵守的书写规范,不复杂,但必须刻进肌肉记忆。
一、缩进:Python的"花括号"
标准:4个空格,不能用Tab
-
Python强制要求同一代码块内的缩进必须一致
-
绝对不要混用Tab和空格------这是初学者最常见的致命错误
-
所有主流编辑器都可以设置:按Tab键时自动插入4个空格
对照案例
C语言(缩进只是风格):
if (x > 0) {
printf("正数");
}
if (x > 0) {
printf("正数");
}
//效果一样
Python(缩进是语法):
if x > 0:
print("正数") # 这4个空格不能少,不能多,不能是Tab
#如果去掉缩进:
if x > 0:
print("正数") # ❌ IndentationError
肌肉记忆口诀
写完冒号,换行必缩进;
退回上一级,缩进要归零。
二、注释:和C很像,但多了"文档字符串"
单行注释 ------ #
# 这是一个单行注释
x = 5 # 行尾也可以注释,建议前面空两格
和C的//等价,只是符号不同。
多行注释 ------ 用三引号(实际是字符串,但常当注释用)
"""
这是一段多行"注释"
其实它是一个字符串,没有被赋值
所以解释器直接忽略------效果和注释一样
常用于文件头、函数说明
"""
C程序员容易混淆 :Python没有/* ... */的多行注释,上面的三引号是文档字符串(docstring),但可以当多行注释用。
文档字符串 ------ 官方推荐的"注释"
写在函数/类/模块的第一行,用三引号:
def add(a, b):
"""返回两个数的和。"""
return a + b
可以通过help(add)查看,是Python自带的文档生成机制。
三、命名规范:告别驼峰,拥抱下划线
| 类型 | 规范 | 示例 | C习惯对比 |
|---|---|---|---|
| 变量名 | 小写+下划线 | user_name, temp_value |
C常用驼峰或下划线均可,Python社区强制下划线 |
| 函数名 | 小写+下划线 | get_data(), set_mode() |
同理 |
| 常量 | 全大写+下划线 | MAX_SIZE, PI |
和C一致 |
| 类名 | 驼峰(首字母大写) | UserProfile, TcpServer |
C中结构体常加_t后缀,Python类用驼峰 |
| "私有"属性 | 前导单下划线 | _internal_flag |
约定俗成:不要直接访问 |
| 特殊方法 | 双下划线开头结尾 | __init__, __str__ |
类似C++的运算符重载 |
重要:Python没有真正的私有变量,前导下划线是约定,不是强制。从C过来的人会觉得不习惯,但这是Python的哲学------"大家都是成年人"。
四、其他常用规范
行长度
-
每行不超过79个字符(老式终端标准)
-
注释/文档字符串不超过72字符
-
超长可以用括号换行:
total = (value1 + value2 + value3 +
value4 + value5)
导入语句
-
每个
import单独一行 -
标准库 → 第三方库 → 本地模块,中间空一行
import os
import sysimport requests
from flask import Flaskfrom mypackage import mymodule
空行
-
函数之间:空两行(顶层函数)
-
类之间:空两行
-
类内方法:空一行
-
逻辑段落:适当空一行,和C一样
def func1():
passdef func2(): # 前面空两行
passclass MyClass:
def method1(self):
passdef method2(self): # 前面空一行 pass
五、初学者最容易犯的规范错误
混用Tab和空格
解决方案:编辑器设置"将Tab转为空格",显示空格符号(VS Code、PyCharm都有此功能)。
if 语句后面忘记冒号
C语言:if (x > 0) ✓
Python:if x > 0: 必须冒号,否则语法错误。
函数内部修改全局变量没加global
这不是规范问题,是语法问题,但初学者总忘。
变量名用驼峰(userName)
Python社区会皱眉头,但不报错。建议尽早养成下划线习惯。
六、如何无痛养成规范?
-
编辑器装自动格式化工具
-
Black:全自动格式化,你写完保存,它帮你把缩进、空格、换行全整规矩。 -
安装:
pip install black,VS Code中配置保存时自动运行。 -
对初学者非常友好------不需要记规则,写脏了它帮你擦干净。
-
-
用有语法高亮和错误提示的IDE
- VS Code + Python插件,缩进错误会直接红色波浪线。
-
别在记事本里写Python------那是自找麻烦。