# Python对比Java和C++ ## 1. 语法简单 - Python: ```python print('Hello world') ``` - C++: ```c #include using namespace std; int main(){ cout << "Hello world!" << endl; return 0; } ``` - Java: ```java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } ``` ## 2. 解释型语言 无需编译 **解释型语言**(Python)不需要在运行前编译成机器码,代码可以直接由解释器**逐行翻译并执行**。 - 简单说就是写好的代码可以直接运行。比如一个代码文件test.py,直接通过`python test.py`就能运行这段代码 **编译型语言**(C++、Java)在运行前需要将源代码编译成机器码或字节码,**生成可执行文件用来执行**。 - 写好的代码不能直接运行,要先变成可执行文件才能运行。比如一个文件test.java或test.cpp: - Java:通过`javac test.java`生成一个test.class的字节码,之后使用`java test.class`来执行这个字节码,才能运行代码 - C++:通过`g++ test.cpp`生成一个可执行文件test.exe (Windows系统)或test (Linux系统),之后执行这个文件来运行代码 **实际使用中的区别**: - Python相比Java和C++,通常**运行速度比较慢**,但是**好处是修改代码后可以立即看到变化**,不需要改一次编译一次。个别大型项目,编译一次需要几个小时。 - Python不需要显式的指定变量的类型: - Python: ```python a = '1' # a为str类型 b = '2' # b为str类型 b = 3 # b可以被直接修改为int类型 print(a+b) # 报错:不同数据类型之间不能运算,说明python是强类型的 ``` - C++: ```c char a = '1'; // a为str类型 char b = '2'; // b为str类型 b = 3; // 报错:b已经被声明为char,就不能用int对他赋值 int b = 3; // 这样是可以的,因为重新声明了变量类型 print(a+b) // 报错:不同数据类型之间不能运算,说明C++也是强类型的 ``` 出现这个现象的原因是Python**逐行翻译并执行**,每一行的内容会依次生效,变量的内存空间是**实时分配的**。而C++等语言需要提前编译,编译的过程中为每一个变量**预先分配了内存**,而不同类型的变量在内存中占用的大小不一致,因此不能通过赋值修改变量类型。 # Python的基础数据类型 **注意:基础数据类型均为保留关键字,不要这些关键字作为变量名!** ```python x = 1 # 合理 int = 1 # 不合理 ``` ## 1. **整数类型(`int`)** 用于表示整数,正数、负数或零。 ```python x = 42 print(type(x)) # 输出: ``` ## 2. **浮点数类型(`float`)** 用于表示带小数的数值。 ```python y = 3.14 print(type(y)) # 输出: ``` ## 3. **布尔类型(`bool`)** 表示逻辑上的真 (`True`) 或假 (`False`) 值。 ```python is_true = True print(type(is_true)) # 输出: ``` ## 4. **列表类型(`list`)** 有序、可变的元素集合,可以包含不同类型的元素。 ```python my_list = [1, 2, 3, "hello"] print(type(my_list)) # 输出: # 访问元素 print(my_list[0]) # 输出: 1 print(my_list[-1]) # 输出: "hello" print(my_list[0:2]) # 输出: [1, 2],要头不要尾 # 修改元素 my_list[0] = 'modified' # ['modified', 2, 3, "hello"] # 添加元素 my_list.append('append') # ['modified', 2, 3, "hello", 'append'] my_list.insert(1, 'insert') # ['modified', 'insert', 2, 3, "hello", 4] # 删除元素 my_list.remove('modified') # ['insert', 2, 3, "hello", 4] my_list.pop(3) # ['insert', 2, 3, 4] # 查找元素 my_list.index(2) # 输出:1 my_list.index(9) # 直接抛异常 2 in my_list # 输出:True 9 in my_list # 输出:False ``` ## 5. **字符串类型(`str`)** 表示文本数据,**本质上是由字符组成的数组**,**所以数组相关的操作都能对字符串做**。 ```python name = "Python" name = 'Python' # 单引号和双引号在python里都表示字符串,没有任何区别 print(type(name)) # 输出: print(name[0]) # 输出: 'P' print(name[-1]) # 输出: 'n' ``` ## 6. **元组类型(`tuple`)** 有序的不可变元素集合,类似于列表,但元组一旦创建就不能修改。 ```python my_tuple = (1, 2, 3) print(type(my_tuple)) # 输出: ``` ## 7. **集合类型(`set`)** **无序、不重复**元素的集合。 ```python my_set = {'one', 'two', 'three', 'three', 'four'} print(my_set) # 输出: {'one', 'two', 'three', 'four'} (集合会自动去重) print(type(my_set)) # 输出: print(my_set[0]) # 直接报错:集合是无序的,不能按下标取值 print('two' in my_set) # 输出:True。集合通常就是这么用的,用来判断一个值在不在集合里。 ``` ## 8. **字典类型(`dict`)** 键-值对的无序集合,且键不可重复。类似于哈希表。 ```python my_dict = {"name": "Alice", "age": 25} print(type(my_dict)) # 输出: ``` ## 9. **None 类型** 表示“无”或“空”的特殊类型。 ```python z = None print(type(z)) # 输出: 类似null ```