Python与C++:异同点对比
文章目录零、总结1.应用场景2.语法差异一、Python比起C缺少什么1.有宏定义吗—— 没有2.有指针吗—— 没有直接暴露3.有 const 关键字吗—— 没有4.有预处理、编译、汇编、链接这 4 步吗—— 没有5.手动内存控制new / delete 与 RAII—— 没有6.编译时多态模板与元编程—— 没有7.强制的访问控制private / protected—— 没有8.头文件.h与实现.cpp分离 —— 没有9.do-while 循环和 switch-case 语句 —— 没有二、Python比C多了什么1.真正的动态类型与“鸭子类型”2.元编程与运行时内省Introspection3.一等公民函数与装饰器Decorator4.内置的超强数据结构5.迭代器与生成器yield6.交互式环境REPL7.自动处理大整数Big Integer三、Python和C都有的1.基本的程序控制结构“骨架”2.面向对象编程OOP的核心三要素3.函数与作用域4.异常处理机制5.注释与代码可读性6.模块化与命名空间零、总结1.应用场景C 把“硬件和性能”掌控到了极致但把“复杂”留给了程序员Python 把“便捷和开发速度”发挥到了极致但把“复杂”交给了底层的 C 解释器。2.语法差异对比项CPython代码块用{ }包裹用冒号 :缩进 (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 IntegerPython 的 int 无限精度随便算 2**10000。C 的 int 超范围直接溢出报错。三、Python和C都有的虽然 Python 和 C 的底层哲学天差地别一个是动态解释型一个是静态编译型但在高层次编程范式和逻辑表达上它们有着非常多的交集。准确来说它们共享的是“编程思想”和“逻辑骨架”而不是“底层硬件操控”。具体共有以下核心部分1.基本的程序控制结构“骨架”条件判断if / else ifPython 写 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 用 privatePython 用 _ 下划线约定。3.函数与作用域函数定义都使用 return 返回值支持传递参数位置参数、默认参数。变量的作用域都区分局部变量函数内和全局变量文件/模块级虽然修饰关键字不同C 靠位置Python 靠 global 声明。递归Recursion两者都支持函数调用自身。4.异常处理机制两者都使用 try / catchPython 将 catch 写作 except来处理运行时错误并且都有 finally无论如何都执行和 throwPython 写作 raise关键字。逻辑流程几乎一模一样。5.注释与代码可读性都支持单行注释C 用 //Python 用 #和多行注释/文档C 用 /* */Python 用三引号 ‘’。6.模块化与命名空间都支持将代码拆分成多个文件。C 靠 .h 和 .cpp 加 includePython 靠 .py 加 import。都是为了避免命名冲突和复用代码。