1. Hello World
// C
#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}
# Python
print("Hello, world!")无 main 函数,无分号,无大括号
直接写,从上到下执行
2. 变量与类型
a = 10 # int
b = 3.14 # float
c = "hello" # str
d = True # bool
e = None # 空值,类似 NULL注意:None 不是 0,也不是 false,它是一个独立的对象。
# 类型随时可变(不推荐滥用)
x = 42
x = "now I'm a string"3. 基本数据类型
数值
a = 42 # int(无大小限制)
b = 3.14 # float(双精度)
c = 1 + 2j # complex(复数)Python 的 int 不会溢出 — 2**1000 也是一个整数。
字符串
s1 = "double quotes"
s2 = 'single quotes' # 没区别
s3 = """multi
line""" # 三引号支持多行
•
len(s) # 长度
s[0] # 索引,同 C
s[-1] # 倒数第一个
s[1:3] # 切片 [1,3),即索引 1,2没有 char 类型 — 单个字符就是长度 1 的字符串。
4. 运算符
大部分和 C 一致,差异:
# 幂运算
x = 2 ** 10 # 1024
•
# 整除
x = 7 // 2 # 3(向下取整)
x = -7 // 2 # -4(注意!不是 -3)
•
# 逻辑运算符(用单词,不用 && || !)
a and b # && 的替代
a or b # || 的替代
not a # ! 的替代
•
# 比较可以链式
1 < x < 10 # C 里必须写成 1 < x && x < 105. 控制流
if / elif / else
x = 10
if x > 0:
print("positive")
elif x == 0:
print("zero")
else:
print("negative")用 缩进 代替大括号
缩进必须一致(通常 4 空格)
只能写为elif
elif后面存在 :
while
i = 0
while i < 10:
print(i)
i += 1 # Python 没有 ++ / --for(代替 C 的三段式 for)
# 等价于 for (int i = 0; i < 10; i++)
for i in range(10):
print(i)
# range(start, stop, step)
for i in range(5, 0, -1): # 5,4,3,2,1
print(i)
# 遍历列表
for item in [1, 2, 3]:
print(item)range(10) → 0,1,2,...,9(不含 10)
6. 函数
def add(a, b):
"""Return a + b.""" # docstring(可选)
return a + b
# 调用
result = add(3, 5)参数特性
# 默认参数
def greet(name, greeting="Hello"):
print(f"{greeting}, {name}")
# 关键字参数(调用时指定参数名)
greet(greeting="Hi", name="Tom")
# 可变参数
def sum_all(*args):
return sum(args) # args 是一个 tuple
sum_all(1, 2, 3) # 67. 数据结构比 C 方便的地方
列表(≈ 动态数组)
arr = [1, 2, 3]
arr.append(4) # 追加
arr.insert(0, 0) # 在开头插入
arr.pop() # 弹出末尾
arr[0] # 索引
len(arr) # 长度字典(≈ 哈希表)
d = {"name": "Alice", "age": 25}
d["name"] # "Alice"
d["age"] = 26
"name" in d # True — 判断 key 是否存在
d.keys() # 所有键
d.values() # 所有值元组(不可变列表)
t = (1, 2, 3)
t[0] # 1
# t[0] = 0 # 报错!不能修改用于函数返回多个值:
def min_max(arr):
return min(arr), max(arr) # 返回元组
low, high = min_max([3, 1, 4, 1, 5]) # 解包8. 列表推导式(List Comprehension)
C 没有的便捷语法:
# 生成 0~9 的平方
squares = [x**2 for x in range(10)]
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 带条件
evens = [x for x in range(20) if x % 2 == 0]
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]等价于:
evens = []
for x in range(20):
if x % 2 == 0:
evens.append(x)9. 字符串格式化
name = "World"
# f-string(Python 3.6+,推荐)
print(f"Hello, {name}")
# 旧式 %(类似 C printf)
print("Hello, %s" % name)
# format 方法
print("Hello, {}".format(name))f-string 里可以写表达式:
print(f"2 + 3 = {2 + 3}")
print(f"π ≈ {3.14159:.2f}") # π ≈ 3.1410. 文件读写
# 读(with 语句自动关闭文件,类似 RAII)
with open("file.txt", "r") as f:
content = f.read() # 整个文件
lines = f.readlines() # 按行列表
# 写
with open("file.txt", "w") as f:
f.write("Hello\n")
# 追加
with open("file.txt", "a") as f:
f.write("more\n")C 的 fopen/fclose/fprintf/fscanf → Python 的 open/with/read/write
11. 异常处理
try:
x = 1 / 0
except ZeroDivisionError:
print("can't divide by zero")
except Exception as e:
print(f"unexpected error: {e}")
finally:
print("always runs") # 类似 C 的 cleanup 代码不用检查返回值 — 出错了抛异常就是。
12. 常用内置函数
len(s) # 长度
range(n) # 0..n-1 序列
type(x) # 获取类型
int(x) # 转整型
float(x) # 转浮点
str(x) # 转字符串
print(x) # 打印
input(s) # 读一行字符串
sum(lst) # 求和
len(lst) # 长度
max(lst) # 最大值
min(lst) # 最小值
sorted(lst) # 排序(返回新列表)13. 不同点速查
14. 快速上手建议
NaN. 装 Python 后,直接打开终端输 python 进交互模式当计算器玩 NaN. 写 .py 文件,python 文件名.py 运行 NaN. 不需要 main() — 但可以用这个惯用写法让文件既可导入又可运行:
def main():
print("Hello")
if __name__ == "__main__":
main()想查什么函数:
help(函数名)或print(函数名.__doc__)
推荐编辑器:VS Code + Python 插件。写一行跑一行,不用编译。
有 C 基础学 Python 最难改的习惯是:忘掉分号、忘掉类型声明、用缩进找感觉。前半小时别扭,之后就回不去了。