从C/C++到Python
如果你学过C或C++,现在想快速上手Python,那这篇文章就是为你准备的。直接告诉你”C++里这个东西对应Python里怎么写”。
前语
很多人在学完C/C++之后接触Python,第一反应往往是:”这也太随意了吧?不用写类型?不用大括号?”
别慌。Python的语法设计就是为了让你少写代码、多做事。如果你已经习惯了C/C++的严谨,那Python对你来说基本就是”降维打击”——你唯一要做的,就是习惯它的表达方式。
这篇文章不会把每个知识点讲得特别深,但足够让你看懂别人的代码、自己写一些实用的小工具。遇到不会的,翻到对应的部分,看一眼就能想起来。
1. 缩进替代了大括号
这大概是最让人困惑的地方,但其实适应起来很快。
代码示例
C/C++ 写法:
1 2 3 4
| if (score >= 60) { printf("及格了"); printf("恭喜你!"); }
|
Python 写法:
1 2 3 4
| if score >= 60: print("及格了") print("恭喜你!")
|
效果演示
C/C++ 输出:
Python 输出:
核心要点:同一层缩进的代码,属于同一个代码块。大部分编辑器都会帮你自动处理缩进,按Tab就行了(编辑器一般会自动转成4个空格)。
常见陷阱:别混用Tab和空格,会报错。绝大多数编辑器默认Tab→4空格,保持这个习惯就行。
2. 变量不用声明类型
这个确实方便不少。
代码示例
C/C++ 写法:
1 2 3
| int age = 20; string name = "张三"; double score = 95.5;
|
Python 写法:
1 2 3
| age = 20 name = "张三" score = 95.5
|
更妙的是,变量可以随时改变类型:
1 2 3
| x = 10 x = "hello" x = [1, 2, 3]
|
效果演示
Python运行结果:
1 2 3 4
| x = 10 # 整数 x = "hello" # 现在变成字符串了 x = [1, 2, 3] # 现在又变成列表了 # 全程不会报错,非常灵活
|
对于习惯静态类型的人来说,这可能会有点不踏实。但你很快会发现,写小脚本的时候,这种灵活性能省掉很多不必要的类型声明。
3. 常用的数据类型
其实和C/C++差不多,就是换了个名字或者写法。
代码示例
基础类型对照:
| 用途 |
C/C++ |
Python |
示例 |
| 整数 |
int |
int |
age = 20 |
| 小数 |
float/double |
float |
pi = 3.14 |
| 字符/字符串 |
char/string |
str |
name = "小明" |
| 真假值 |
bool |
bool |
is_student = True |
| 空值 |
NULL/nullptr |
None |
result = None |
字符串操作:
1 2 3 4 5 6 7 8 9 10
| s = "Hello, World!"
len(s) s[0] s[-1] s[0:5] s.lower() s.upper() s.replace("World", "Python") "123".isdigit()
|
类型转换:
1 2 3 4
| int("123") str(123) float("3.14") bool(0)
|
效果演示
1 2 3 4 5 6 7 8 9 10 11 12 13
| len("Hello, World!") → 13 s[0] → 'H' s[-1] → '!' s[0:5] → 'Hello' s.lower() → 'hello, world!' s.upper() → 'HELLO, WORLD!' s.replace("World", "Python") → 'Hello, Python!' "123".isdigit() → True
int("123") → 123 str(123) → "123" float("3.14") → 3.14 bool(0) → False
|
4. 输入输出
代码示例
输出:
1 2 3 4 5 6 7 8 9 10 11
| name = "小明" age = 20
print("姓名:", name, ",年龄:", age)
print(f"姓名:{name},年龄:{age}")
print("姓名:{},年龄:{}".format(name, age))
|
输入:
1 2 3
| name = input("请输入姓名:") age = int(input("请输入年龄:")) score = float(input("请输入成绩:"))
|
效果演示
输出结果:
1 2 3
| 姓名: 小明 ,年龄: 20 姓名:小明,年龄:20 姓名:小明,年龄:20
|
输入交互:
1 2 3 4
| 请输入姓名:小明 请输入年龄:20 请输入成绩:95.5 # name = "小明", age = 20, score = 95.5
|
f-string是最方便的,花括号里可以直接写变量名,甚至能写表达式,比如 {age + 1}。
记住:input() 永远返回字符串,要数字就自己转。
5. 条件判断
写法上最大的区别就是 else if 变成了 elif。
代码示例
1 2 3 4 5 6 7 8 9 10 11 12
| score = 85
if score >= 90: grade = 'A' elif score >= 80: grade = 'B' elif score >= 60: grade = 'C' else: grade = 'D'
print(f"成绩等级:{grade}")
|
三目运算符(条件表达式):
1 2
| max_val = a if a > b else b
|
逻辑运算符:
1 2 3 4 5
| if age >= 18 and score >= 60: print("成年且及格")
if not is_holiday: print("今天上班")
|
效果演示
1 2 3 4 5 6
| 成绩等级:B
# 逻辑运算符对照表 and → && (并且) or → || (或者) not → ! (非)
|
6. 循环
代码示例
for循环:
1 2 3 4 5 6 7 8 9 10 11 12 13
| for i in range(10): print(i, end=" ")
print()
for i in range(2, 10): print(i, end=" ")
print()
for i in range(0, 10, 2): print(i, end=" ")
|
遍历列表:
1 2 3 4 5 6 7 8 9
| fruits = ["苹果", "香蕉", "橘子"]
for fruit in fruits: print(fruit)
for i, fruit in enumerate(fruits): print(f"第{i}个是{fruit}")
|
while循环:
1 2 3 4
| i = 0 while i < 10: print(i, end=" ") i += 1
|
效果演示
1 2 3 4 5 6 7 8 9 10 11 12 13
| for i in range(10): → 0 1 2 3 4 5 6 7 8 9 for i in range(2, 10): → 2 3 4 5 6 7 8 9 for i in range(0, 10, 2):→ 0 2 4 6 8
遍历列表: 苹果 香蕉 橘子 第0个是苹果 第1个是香蕉 第2个是橘子
while循环:0 1 2 3 4 5 6 7 8 9
|
range(n) 生成0到n-1的序列,range(start, end, step) 可以指定起始、结束和步长。
Python里没有 i++ 这种写法,要用 i += 1。
7. 列表:Python里的”数组”
列表是Python里最常用的数据结构,相当于C++里的 vector。
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| arr = [1, 2, 3, 4, 5] mixed = [1, "hello", 3.14, True]
print(arr[0]) print(arr[-1]) print(arr[-2])
print(arr[1:4]) print(arr[:3]) print(arr[2:]) print(arr[::-1])
|
常用方法:
1 2 3 4 5 6 7 8
| arr.append(6) arr.insert(0, 0) arr.pop() arr.pop(0) arr.remove(3) print(len(arr)) arr.sort() sorted(arr)
|
列表推导式:
1 2 3 4 5 6 7
| squares = [x**2 for x in range(1, 11)] print(squares)
evens = [x for x in range(20) if x % 2 == 0] print(evens)
|
效果演示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| arr[0] → 1 arr[-1] → 5 arr[-2] → 4 arr[1:4] → [2, 3, 4] arr[:3] → [1, 2, 3] arr[2:] → [3, 4, 5] arr[::-1] → [5, 4, 3, 2, 1]
常用方法演示: arr.append(6) → [1, 2, 3, 4, 5, 6] arr.insert(0, 0) → [0, 1, 2, 3, 4, 5, 6] len(arr) → 7
列表推导式: squares → [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] evens → [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
|
8. 字典:键值对存储
字典相当于C++里的 map 或 unordered_map。
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| student = { "name": "小明", "age": 20, "score": 95.5 }
print(student["name"]) print(student.get("name")) print(student.get("gender", "未知"))
student["age"] = 21 student["gender"] = "男"
del student["gender"] student.pop("age")
for key in student: print(key, student[key])
for key, value in student.items(): print(f"{key}: {value}")
if "name" in student: print("有name这个键")
|
效果演示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| student["name"] → 小明 student.get("name") → 小明 student.get("gender", "未知") → 未知
添加gender后: student → {"name": "小明", "age": 21, "score": 95.5, "gender": "男"}
遍历输出: name 小明 age 21 score 95.5
name: 小明 age: 21 score: 95.5
判断结果:有name这个键
|
9. 函数
代码示例
基本定义:
1 2 3 4 5
| def add(a, b): return a + b
result = add(3, 5) print(result)
|
默认参数:
1 2 3 4 5
| def greet(name, greeting="你好"): print(f"{greeting},{name}")
greet("小明") greet("小明", "Hello")
|
返回多个值:
1 2 3 4 5
| def divide(a, b): return a // b, a % b
quot, rem = divide(10, 3) print(f"商:{quot},余数:{rem}")
|
不定长参数:
1 2 3 4 5 6 7 8 9 10 11 12
| def sum_all(*args): return sum(args)
print(sum_all(1, 2, 3, 4))
def print_info(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}")
print_info(name="小明", age=20)
|
效果演示
1 2 3 4 5 6 7 8 9 10 11 12
| add(3, 5) → 8
greet("小明") → 你好,小明 greet("小明", "Hello") → Hello,小明
divide(10, 3) → 商:3,余数:1
sum_all(1, 2, 3, 4) → 10
print_info(name="小明", age=20) → name: 小明 age: 20
|
如果没有 return,函数会返回 None(类似于C++里的 void)。
默认参数不要用列表、字典这种可变对象。
10. 简单的类
Python的类写法比C++简洁很多。
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class Student: def __init__(self, name, age): self.name = name self.age = age def introduce(self): print(f"我叫{self.name},今年{self.age}岁") def study(self, subject): print(f"{self.name}正在学习{subject}")
stu = Student("小明", 20) stu.introduce() stu.study("Python")
|
继承:
1 2 3 4 5 6 7 8 9 10 11
| class CollegeStudent(Student): def __init__(self, name, age, major): super().__init__(name, age) self.major = major def introduce(self): print(f"我叫{self.name},专业是{self.major}")
stu2 = CollegeStudent("小红", 22, "网络工程") stu2.introduce()
|
效果演示
1 2 3 4 5 6
| 创建Student对象: stu.introduce() → 我叫小明,今年20岁 stu.study("Python") → 小明正在学习Python
继承演示: stu2.introduce() → 我叫小红,专业是网络工程
|
11. 异常处理
C/C++里通常用返回值来判断错误,Python里用 try-except 捕获异常。
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| try: num = int(input("请输入数字:")) result = 10 / num print(f"结果是:{result}") except ValueError: print("输入的不是有效数字") except ZeroDivisionError: print("不能除以零") except Exception as e: print(f"发生错误:{e}") else: print("计算成功") finally: print("程序结束")
|
效果演示
正常输入:
1 2 3 4
| 请输入数字:5 结果是:2.0 计算成功 程序结束
|
输入0:
输入字母:
1 2 3
| 请输入数字:abc 输入的不是有效数字 程序结束
|
finally 里的代码不管有没有异常都会执行,适合做清理工作。
12. 文件操作
读写文件最推荐用 with 语句,它会自动关闭文件。
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| with open("test.txt", "r", encoding="utf-8") as f: content = f.read() print(content) for line in f: print(line, end="")
with open("output.txt", "w", encoding="utf-8") as f: f.write("第一行\n") f.write("第二行\n")
with open("output.txt", "a", encoding="utf-8") as f: f.write("第三行\n")
|
效果演示
文件模式说明:
| 模式 |
说明 |
'r' |
读(默认) |
'w' |
写(覆盖) |
'a' |
追加 |
'rb'/'wb' |
二进制读写 |
执行结果:
1 2
| # test.txt 内容被读取并打印 # output.txt 被写入三行内容
|
13. 常用的内置模块
代码示例
math模块:
1 2 3 4 5
| import math print(math.sqrt(16)) print(math.pow(2, 10)) print(math.pi) print(math.factorial(5))
|
random模块:
1 2 3 4
| import random print(random.randint(1, 10)) print(random.random()) print(random.choice(['a', 'b', 'c']))
|
datetime模块:
1 2 3 4 5
| from datetime import datetime, timedelta now = datetime.now() print(now.strftime("%Y-%m-%d %H:%M:%S")) tomorrow = now + timedelta(days=1) print(tomorrow)
|
os模块:
1 2 3 4 5
| import os print(os.getcwd()) print(os.listdir(".")) print(os.path.exists("file.txt")) print(os.path.join("a", "b.txt"))
|
效果演示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| math.sqrt(16) → 4.0 math.pow(2, 10) → 1024.0 math.pi → 3.141592653589793 math.factorial(5) → 120
random.randint(1, 10) → 7(随机) random.random() → 0.456789(随机) random.choice(['a', 'b', 'c']) → 'b'(随机)
datetime格式化 → 2026-08-08 14:30:00 tomorrow → 2026-08-09 14:30:00
os.getcwd() → /path/to/current/directory os.listdir(".") → ['file1.py', 'file2.txt', ...] os.path.exists("file.txt") → False os.path.join("a", "b.txt") → a/b.txt
|
14. 一个小例子
把上面这些串起来,写一个简单的联系人管理程序:
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class ContactManager: def __init__(self): self.contacts = [] def add(self, name, phone): self.contacts.append({"name": name, "phone": phone}) print(f"已添加:{name}") def show_all(self): if not self.contacts: print("暂无联系人") return for c in self.contacts: print(f"{c['name']}: {c['phone']}") def search(self, name): for c in self.contacts: if c['name'] == name: print(f"找到:{c['name']} - {c['phone']}") return print("未找到该联系人") def save(self, filename): import json with open(filename, 'w', encoding='utf-8') as f: json.dump(self.contacts, f, ensure_ascii=False) print("保存成功")
mgr = ContactManager() mgr.add("张三", "13800138001") mgr.add("李四", "13800138002") mgr.show_all() mgr.search("张三") mgr.save("contacts.json")
|
效果演示
1 2 3 4 5 6
| 已添加:张三 已添加:李四 张三: 13800138001 李四: 13800138002 找到:张三 - 13800138001 保存成功
|
15. 速查对照表
代码示例(对照表)
| 需求 |
C/C++ |
Python |
| 循环n次 |
for (int i=0; i<n; i++) |
for i in range(n): |
| 遍历数组 |
for (int i=0; i<n; i++) |
for item in arr: |
| 带索引遍历 |
- |
for i, item in enumerate(arr): |
| 条件判断 |
if (x > 0) { ... } |
if x > 0: |
| 多分支 |
else if |
elif |
| 逻辑与 |
&& |
and |
| 逻辑或 |
|| |
or |
| 逻辑非 |
! |
not |
| 三目运算 |
a ? b : c |
b if a else c |
| 数组长度 |
sizeof(arr)/sizeof(arr[0]) |
len(arr) |
| 字符串转数字 |
atoi() |
int() |
| 数字转字符串 |
to_string() |
str() |
| 函数定义 |
int add(int a, int b) |
def add(a, b): |
| 构造函数 |
Student(...) |
def __init__(self, ...) |
| 继承 |
class Dog : public Animal |
class Dog(Animal): |
| 空指针 |
NULL/nullptr |
None |
| 文件读 |
fopen/fread |
with open(...) as f: |
| 注释 |
// |
# |
| 打印 |
printf/cout |
print() |
| 输入 |
scanf/cin |
input() |
效果演示
以上对照表覆盖了C/C++开发者最常用的语法场景,建议收藏备用。
结语
Python跟C/C++最大的不同,其实不是语法,而是”思维方式”。C/C++让你关心内存、类型、编译,Python让你专注”我要做什么”。
如果你已经熟悉C/C++,学Python大概只需要一周就能上手。遇到不懂的,多 print() 调试,多看报错信息(Python的错误信息其实挺友好的),多试几次就熟练了。
希望这份手册能帮你顺利过渡到Python。
写代码愉快!