前言
为什么我想写这篇文章,因为我发现自己有时候 Python 的代码写的太多了,回过头来发现自己忘记了很多 C/C++的语法和代码。
于是想通过这篇文章来给各位以及我自己重新温习一下它们的不同与相同之处。文章说明:前者为 C/C++的代码,后者是 Python 的代码,文中为 Python3
目录
变量以及基础
// C/C++ 变量需要先声明再使用,每一块代码结束需要;符号作为结尾
// type vatName;
int a; | char b; | double d; | float e; | string f;
// C/C++中的printf函数必须指定格式
int a=1;
printf("%d",a);
# Python 无需声明变量可直接使用,且每行代码无需符号用于结尾(可以但没必要也不建议)
a=0 | b="hello,world" | c=0.1 | d=[] | e={} | f=set()
# Python的print函数无需指定格式即可输出,且可以无限制输出
a=b=c=d=e=f=g=h=j=1
print("Hello,World\r\n", a, b, c, d, e, f, g, h, j)
C/C++字符(char)变量中’‘和""代表的意思不一样,前者代表字符,后者代表字符串。
Python 没有 char 类型,所以’'和""代表的都是字符串
C/C++有完善的 switch 语句用于逻辑判断
Python 在 3.10 版本之前没有 switch 语句
C/C++用花括号{}分隔每个代码块,无严格缩进要求
Python 以缩进分隔每个代码块,有严格的缩进要求
C/C++不能使用右边这样的赋值方式 int a=b=c=d=e=f=1;
Python 可以将所有相同类型的变量以上面的方式同时赋值 a=b=c=d=e=f=1
C/C++不能使用右边的赋值方式 int a,b=1,2; 但是可以 int a,b=1;(注意此处a并没有被赋值)
Python 可以使用上述赋值方式 a,b=1,2,但不能使用 a,b=1
深拷贝,浅拷贝这些内容请自行查询,由于篇幅原因此处省略
C/C++代码需要在头部载入头文件用于编译时使用
Python无需自行在头部添加模块 (解释器执行时会自动导入需要的模块)
if 判断语句
int a=0;
if(a<=0) // 需要括号将变量包起来,与或非的表达为 && || !,并且不是以:结尾
{
printf("True");
}
else if (a==1)
{
printf("a=1");
}
else
{
printf("False");
}
a=0
if a==0: # 无需括号,结尾是冒号,与或非的表达式为 and or not
print("True")
elif a==1:
print("a=1")
else:
print("False")
Python 与 C/C++都可使用以下的判断方式,但为了代码可维护性,不建议这样编写
int a=1; if (a == 1 && 0x01) { //与if (a == 1 && a==0x01)同理 cout << "True" << endl; }
a=1 if a == 1 and 0x01: # 与if a == 1 and a==0x01同理 print("True")
for 循环语句
//多种写法
// -----第一种,不提前声明变量-----
for(int x=0; x < 100; x++)
// -----第二种,提前声明变量-----
int x;
for(x=0; x < 100; x++)
// -----第三种,不太好描述,直接看代码吧,括号里的;不能省略-----
int x=0;
for( ; x<100; x++)
for(x; ; x++)
for(x; x<100; ;)
# Python中的for循环用法可以及其刁钻
# 先创建两个变量,一会你就知道为什么要创建了
a=[1,2,3,4]
b={"key1":"value1","key2":"value2"}
# -----第一种,常规用法-----
for x in range(123):
for x in range(len(a)):
for x in range(14,125): # 真实范围是14~124
# -----第二种,遍历列表或字典-----
for x in (a, b):
# -----第三种,也是我认为最牛逼的一种-----
list_data=[x for x in range(123)]
# 等同于
list_data=[]
for x in range(123):
list_data.append(x)
list_data=[x for x in a]
# 等同于
list_data=[]
for x in a:
list_data.append(x)
list_data=[x for x in range(256) if x%2!=0]
# 等同于
list_data=[]
for x in range(256):
if x%2!=0:
list_data.append(x)
C,C++,Python 这三个编程语言的 for 循环语句都可以写的非常刁钻,以实现编程即混淆(doge)
while 循环语句
在 while 循环中,其实这两者的区别可以说是基本没有,除了上面说到过的缩进和结尾的冒号
只不过 Python 截至目前并没有 do…while 语句的这样的写法
函数
/*
类型 函数名(实参)
{
code
}
*/
// 实例
char man(const char *name, int age);
int main(int argc, char *argv[])
{
const char Name[]={"SN-Grotesque"};
int age=19;
cout << man(Name,age) << endl;
return 0;
}
char man(const char *name, int age)
{
return(*name);
}
'''
def 函数名(实参):
code
'''
# 实例
def demo(Name, Age):
# 会输出一个元组
return Name, Age
demo("SN-Grotesque",19)
与 Python 相比,C/C++的函数显得很笨拙,因为需要手动告知变量类型。
并且 C/C++的函数在使用过程中也略显麻烦,如果函数在 main 函数之后的话需要先声明再使用
而 Python 的函数只要在同一个代码文件里面,将函数放在哪都行,不用声明
在C/C++中,如果要用函数返回整型数组的话,需要用指针来接收对应函数的值,如下int *ak(int size) //注意函数也需要定义为指针 { int *key[size]={0}; return key[size]; } int main() { int *varName=ak(32); return 0; }
头文件/模块
#include <stdio.h>
#include <iostream>
#include "自定义.h"
#include "../dirname/自定义.h"
import os
from os import *
import .module as name
这两者的
头文件/模块
在编写时都是非常自由的,但是在载入时差距就比较大了
C/C++的头文件需要注意符号的区别,<>
一般是载入库中已有的头文件,""
一般是载入自己编写的或库中没有的头文件,符号使用错误的话会导致无法载入头文件,C/C++对于字符这一块控制还是很严格的。
Python则宽松很多,只要在import
时指定位置即可,比如from dirname import module.class.funcion
Python的模块在编写时,建议创建对应名字的文件夹__init__.py
与其他py文件,否则看着很乱
如下目录结构模块名/-- __init__.py 其他名.py
细节决定成败
[ 字 符 串 拼 接 ]
// 在C/C++内,有些函数是直接给变量赋值的,例如下面这个函数
strcat(); //拼接字符串
// 下面是它的模板
char *strcat(char *__restrict__ _Dest, const char *__restrict__ _Source)
// 一共只需要两个变量,如下
char a[]="hello,";
char b[]=" world";
strcat(a, b);
// b拼接在了a的后面,a的值已经改变,不需要第三个变量来赋值
// 以下是错误的思路或方式
char c[]={strcat(a, b)}; //重复赋值,且代码难以维护
# 在Python里,方法截然不同,并且语句尤其简单。
a="123"
b="456"
a=a+b
在C/C++里不能直接使用加号
+
将两个字符串拼接起来,虽然Javascript也是加号,啊,解释型语言用多了就是不好
[ 字 符 串 比 较 ]
// C/C++内置了一些字符串比较的函数,头文件string, string.h, cstring等
strcmp(); // 比较字符串
//下面是它的模板
int strcmp(const char *_Str1, const char *_Str2)
// 返回值为0时说明字符串相同
// 以下是错误示范
char a[]="123";
char b[]="456";
if (a == b)
// C/C++内不能直接用比较符进行判断,在不同的系统上会出现不同的错误
a="123"
b="456"
# Python比较字符串有下面的几种方式
a == b
a is b
id(a) == id(b) # 比较内存地址
[ 函 数 赋 值 ]
// 以strcat();函数为例
char a[] = {"Hello, "};
char b[] = {"World."};
strcat(a, b); // 将字符串拼接
cout << a << endl;
Hello, World.
// 可以看到此时变量a的值已经产生变化
// 无需再用任何赋值方法给变量a赋值
# 而Python则完全相反
>>> a="123"
>>> b="456"
>>> a+b
'123456'
>>> a
'123'
>>> b
'456'
# 可以看到虽然我们执行了拼接,但是实际上变量并没有任何变化
# 必须将上述的语句使用变量赋值,如:a = a + b
# 再如直接将字符串转为列表
>>> a="123456"
>>> a
'123456'
>>> list(a)
['1', '2', '3', '4', '5', '6']
>>> a
'123456'
# 可以看到变量a并没有任何变化,因为必须要再次赋值
# a = list(a)