Python与C++:异同点对比

文章目录

零、总结

1.应用场景

C++ 把"硬件和性能"掌控到了极致,但把"复杂"留给了程序员;

Python 把"便捷和开发速度"发挥到了极致,但把"复杂"交给了底层的 C 解释器。

2.语法差异

对比项 C++ Python
代码块 { } 包裹 冒号 : + 缩进 (4个空格) 包裹
语句结束 必须加分号 ; 不需要分号 (换行即结束)
变量声明 int a = 10; 直接赋值 a = 10(无需类型)
注释 // 注释 # 注释

一、Python比起C++缺少什么?

1.有宏定义吗?------ 没有

原因:宏依赖预处理阶段,而 Python 没有独立的预处理器。

替代方案:在 Python 中,需要代码生成或动态修改逻辑时,通常使用装饰器(Decorator)、exec() / eval(),或者直接用普通的函数和变量(因为 Python 本身就是动态的,不需要宏来"生成样板代码")。

2.有指针吗?------ 没有(直接暴露)

原因:C/C++ 的指针允许直接操作内存地址(如 int *p)。Python 为了内存安全和简化编程,彻底屏蔽了底层内存操作。

Python 的"引用"机制:虽然 Python 的变量底层也是通过指针实现的(所有变量都是指向对象的引用),但你不能像 C 那样对地址进行加减运算(p++),也无法获取解引用原始地址。你只能拿到对象的 id()(类似地址值,但不能用于运算)。

3.有 const 关键字吗?------ 没有

原因:const 是编译期用来静态检查的约束,确保变量不被修改。Python 是动态解释型语言,变量的类型和值在运行时都可以随意改变。

替代方案:社区约定使用全大写命名(如 PI = 3.14)来暗示这是一个常量。但请注意,这只是君子协议,没有语言强制力,你依然可以修改它。

4.有预处理、编译、汇编、链接这 4 步吗?------ 没有

原因:C/C++ 是编译型语言,最终生成 CPU 直接执行的机器码(.exe)。而 Python 是解释型(混合编译)语言。

Python 的实际流程(以 CPython 为例):

词法/语法分析(无宏替换)

编译:直接生成 字节码(Bytecode)(.pyc 文件),而不是汇编语言(.s)。

解释执行:Python 虚拟机(PVM)逐条读取并执行字节码。

结果:没有单独的汇编步骤(不生成机器码),没有链接步骤(不拼接 .obj 生成 .exe)。

5.手动内存控制(new / delete 与 RAII)------ 没有

C++ 可以精确控制对象在堆还是栈上,何时创建、何时销毁(确定性析构)。Python 完全依赖垃圾回收(GC),你无法精确控制对象释放的时机(只能靠 del 降低引用计数,但循环引用得等 GC 扫描)。

6.编译时多态(模板与元编程)------ 没有

C++ 的模板(Template)在编译期展开,零运行时开销。Python 没有编译期,所有多态都靠运行时鸭子类型,会有轻微性能损耗。

7.强制的访问控制(private / protected)------ 没有

C++ 的访问修饰符是编译期强制检查的。Python 全靠"君子协议"(_name 和 __name 只是语法糖,实际外部依然能强行访问)。

8.头文件(.h)与实现(.cpp)分离 ------ 没有

C++ 需要这种物理隔离来管理接口。Python 没有头文件,代码全写在一个 .py 文件里(虽然维护方便,但大型项目找函数定义有时靠 IDE)。

9.do-while 循环和 switch-case 语句 ------ 没有

注:Python 3.10+ 有了 match-case,但经典的 switch 和 do-while 语法确实不原生支持。

二、Python比C++多了什么?

1.真正的动态类型与"鸭子类型"

变量不需要声明类型,运行时可以随意指向任何对象。写代码极快,但 IDE 智能提示不如 C++ 那么稳。

2.元编程与运行时内省(Introspection)

你可以用 type()、dir()、hasattr() 在运行时查看任何对象的属性和方法,甚至动态修改类结构(猴子补丁)。C++ 做不到这种运行时级别的灵活。

3.一等公民函数与装饰器(Decorator)

函数可以作为参数传来传去,装饰器可以像"切面包"一样给现有函数前后插入日志、计时、权限校验,而不改动原函数内部代码------这在 C++ 里极其复杂。

4.内置的超强数据结构

list、dict、set、tuple 是原生语法糖,配合列表推导式 x\*2 for x in range(10),一行顶 C++ 十行。

5.迭代器与生成器(yield)

处理海量数据时可以懒加载,不占内存,写法像写故事一样自然。C++ 虽然也有迭代器,但写起来远不如 Python 流畅。

6.交互式环境(REPL)

直接在终端敲 python 回车,写一行代码立刻看到结果。C++ 必须经过"编写 → 编译 → 链接 → 运行"这漫长四步。

7.自动处理大整数(Big Integer)

Python 的 int 无限精度,随便算 2**10000。C++ 的 int 超范围直接溢出报错。

三、Python和C++都有的

虽然 Python 和 C++ 的底层哲学天差地别(一个是动态解释型,一个是静态编译型),但在高层次编程范式和逻辑表达上,它们有着非常多的交集。

准确来说,它们共享的是"编程思想"和"逻辑骨架",而不是"底层硬件操控"。具体共有以下核心部分:

1.基本的程序控制结构("骨架")

条件判断:if / else if(Python 写 elif)/ else。

循环:while 和 for(虽然 C++ 的 for 更接近底层索引,Python 更接近迭代器,但关键字和逻辑是相同的)。

逻辑运算符:&&(Python 写 and)、||(Python 写 or)、!(Python 写 not)。功能完全一致。

2.面向对象编程(OOP)的核心三要素

类(Class)与对象(Object):两者都支持用 class 关键字定义蓝图。

继承(Inheritance):都支持单继承和多继承(C++ 的多继承很复杂,Python 也支持多继承,且有 MRO 解析顺序)。

多态(Polymorphism):虽然 C++ 靠虚函数表(编译期/运行时),Python 靠鸭子类型(运行时),但"父类指针指向子类对象,调用同一接口得到不同行为"的逻辑是共通的。

封装(Encapsulation):都有隐藏内部实现细节的理念(C++ 用 private,Python 用 _ 下划线约定)。

3.函数与作用域

函数定义:都使用 return 返回值,支持传递参数(位置参数、默认参数)。

变量的作用域:都区分局部变量(函数内)和全局变量(文件/模块级),虽然修饰关键字不同(C++ 靠位置,Python 靠 global 声明)。

递归(Recursion):两者都支持函数调用自身。

4.异常处理机制

两者都使用 try / catch(Python 将 catch 写作 except)来处理运行时错误,并且都有 finally(无论如何都执行)和 throw(Python 写作 raise)关键字。逻辑流程几乎一模一样。

5.注释与代码可读性

都支持单行注释(C++ 用 //,Python 用 #)和多行注释/文档(C++ 用 /* */,Python 用三引号 ''')。

6.模块化与命名空间

都支持将代码拆分成多个文件。C++ 靠 .h 和 .cpp 加 include,Python 靠 .py 加 import。都是为了避免命名冲突和复用代码。

相关推荐
hangyuekejiGEO2 小时前
GEO技术服务选型指南
大数据·人工智能·python
软萌萌的13 小时前
Java Spring Boot 修改yml配置&加载顺序规则
java·spring boot·python
Dxy12393102164 小时前
Linux 编译安装 Python 3.12.10(多版本共存,不破坏系统Python)
linux·运维·python
持敬chijing5 小时前
Python概述
开发语言·python
888CC++5 小时前
C语言与C++的区别:从面向过程到面向对象
java·c语言·c++
赤羽尾风6 小时前
NumPy快速入门
python·numpy
Darkwanderor7 小时前
Linux系统编程实战项目:模拟实现shell
linux·c++
倒流时光三十年7 小时前
第三阶段 26 · highlight 高亮(返回命中片段)
后端·python·django