目录
一、概述
Python和C++都是面向对象的。
Python和C++的区别:
- Python是脚本语言,脚本语言不需要编译,直接解释执行,由解释器来负责解释。程序代码即是脚本程序,也是可执行文件,只需要编写-运行。
- C++是编译型编程语言,需要编译成二进制代码,以可执行文件形式运行,需要经过编写-编译-链接-运行的过程。
从语法角度来说:Python更加灵活;C++逻辑更加清晰。
Python | C++ | |
import cmath 导入模块,每一个.py文件都可以认为是一个模块。Python中导入的模块可以是类的定义,函数的定义。 |
#include 引入头文件,头文件为类或函数的声明。 C++支持分离式编译,对源文件分别编译成目标文件,再链接生成可执行文件。通过头文件把源文件关联起来。 |
|
在python程序中直接添加sys.path,即import时寻找模块的路径 | 在cmakelist中设置include_directories(),即include时寻找相应头文件的路径 |
|
在程序中添加单元测试 | if __name__ == "__main__": 当模块被作为脚本直接运行时,执行之后的程序块; 当模块被其他模块导入时,不执行之后的程序块。 非常方便,可以直接将单元测试脚本写在if __name__ == "__main__":后,保证程序功能正常 |
C++需要有一个 main 函数来作为程序的入口。如果需要单元测试需要单独写带有main函数的源文件。 |
数据类型 | 决定数据所占内存空间的大小、布局方式、该空间能存储的值的范围、以及数据能参与的运算 | |
对象 | 一切皆对象(数据类型、函数、类都是对象)。对象包含identity(Python中即为对象的内存地址,一旦创建不再改变)、类型信息、值、引用计数(用于记录当前有多少个变量在引用这个对象。一旦引用计数器为0,那么该对象就会被系统自动回收)、。 |
一块能存储数据并具有某种类型的内存空间 |
变量 | 在python中就是个name,Names refer to objects. Names are introduced by name binding operations. 没有类型信息,是通用的(增加python的灵活性),引用一个对象。 (即变量是对象内存地址的引用) |
命了名的对象,即具名的、存储数据并具有某种类型的内存空间 (即变量有一个名字,并在内存中占据一定的存储单元,在该存储单元中存放变量的值) |
引用 | 引用即别名,为已经存在的对象所起的另外一个名字,引用自身不是对象 | |
指针 | 指针用来存放某个对象的地址,指针自身也是一个对象 | |
= | name binding,名字绑定,变量存储对象的引用 对象分为可变对象和不可变对象,进行name binding时内存空间示意图可参见:Python中的变量、对象 - 汉尼拔草 - 博客园 |
把值赋给变量(对象) |
二、基本操作
Python |
C++ |
|
int最大整型\最小整型 | O 备注:sys.maxsize \ -sys.maxsize-1 (跟计算机相关,可能是32位,也可能是64位) sys.maxint \ -sys.maxint-1在python2中支持,在python3中不支持了 |
INT_MAX \ (4Bytes,即32bits的最大值2^31-1) INT_MIN (-2^31) |
float最大值\最小值 | float('inf') \ float('-inf') |
FLT_MAX \ FLT_MIN |
两字符相减 | 字符不能直接相减,必须先用ord()函数返回字符串的ASCII值,才能相见 | 字符可以直接相减 |
/ | 两个整型做“/”运算,得到浮点型的结果 | 两个整型做“/”运算,得到整型,相当于除完取int(),小数部分截断,即向0取整 |
// 地板除,即向负无穷取整 8//3 结果为2 -8//3 结果为-3 |
||
% | % 取模(modulus) -10%3 结果为2 -90%8结果为6 |
% 取余 -10%3 结果为-1 -90%8结果为-2 |
PS:
取模(Modulus ) V.S. 取余(Remainder)
对于整型数a,b来说,取模运算或者求余运算的过程都是:
1. 求 整数商: c = a/b; (把这里的/理解成数学意义的除。求模运算和求余运算在这一步不同:取模运算在本步骤计算c的值时,向负无穷方向舍入(向下取整);取余运算在本步骤取c的值时,向0 方向截断;)
2. 计算模或者余数: r = a - c*b (本步骤取模和取余相同)
以python实现为例,取模和取余代码区别为:
# 取模,Python中可直接用%,计算模,r = a % b def mod(a, b): c = a // b r = a - c * b return r # 取余 def rem(a, b): c = int(a / b) r = a - c * b return r