一、基础概念
C语言是一门编译型语言,需要编译器将代码转化成电脑能够识别的二进制,可以脱离其语言环境独立执行,执行效率极高,但应用程序一旦需要修改,必须先修改源代码,然后重新编译。而且编译型代码是针对某一平台编译的,当前平台的编译结果无法在其他的平台使用。
Python是一门解释型语言,运用解释器进行逐行的解释,立马解释,因此解释效率低,但是开发效率极高,一旦发现错误可直接修改,且跨平台能力强。
二、变量
1.C语言中变量需要定义,int char float等
而Python不需要定义
2.Python不支持静态变量,因为Python是动态语言,不存在完全静态的变量
而C语言里面的变量类型很多,自动、静态、寄存器、外部等
三、输入与输出
C语言的输入与输出为scanf与printf,需要用匹配的占位符和取地址符
Python的输入与输出为input与print,什么都不需要,输入什么类型就是什么类型
四、基本框架
C语言是由若干头文件与函数构成的,其中必须包含主函数main,主函数是程序的唯一入口;表示层次和从属时需要打花括号,且要成对;当一句可执行语句结束的时候末尾需要有分号
Python是由模块组成的,一个模块对应Python源文件,后缀名为.py,执行程序时按照模块中语句的顺序依次执行;没有主函数;表示层次和从属时不需要打括号,但是要严格缩进;不需要打分号
五、注释
C语言的单行注释为// 多行注释为/* */
Python的单行注释为# 多行注释为‘’‘ ’‘’
六、运算符
C语言有自增和自减运算符++、-- 但是没有乘方,> < 也不能连起来比较,必须用&&连接;逻辑运算符分别为&& || !
Python无自增和自减运算符,而是用+=1,-=1代替,有乘方为**,> <也可以连着用;逻辑运算符分别为and or not;比C语言多了一个成员运算符in,可以直接检测某数据是否存在于另一个里面;Python有身份运算符is is not用来判断两个标识符是不是引用自一个对象,而is与==的区别在于:is 用于判断两个变量引用对象是否为同一个(同一块内存空间), == 用于判断引用变量的值是否相等
七、选择结构
C语言的if后面判断条件需要加()并打上{ };多重if格式为if、else if、else;有switch语句
Python的if后面不需要括号,只需要一个空格,在末尾加上一个冒号,下面从属于这个if的代码块均需要相同的缩进;多重if的格式为if、elif、else;没有switch
八、循环结构
C语言有while do while for三种循环语句;goto语句
Python有while for两种循环语句,但Python的for循环可以历遍任何数据类型,字符串,列表等; pass 是空语句,是为了保持程序结构的完整性,pass 不做任何事情,一般用做占位语句,在程序没写完时避免空代码报错
九、数组与列表
C语言中有数组,分为一维数组、多维数组、字符串数组;用于储存相同类型的数据,并通过索引取出或加入;增减、操作元素只能用for循环等方法手动操作
Python中有列表,与C语言不同,Python的列表可以切片,也就是list[1: 3],把某一段数据取出;Python的列表可以由其他类型直接转化过来list(),但是转化进列表的数据类型全部变为字符类型;列表有很多可直接调用的函数用来增减、操作元素
十、函数
C语言的函数需要在主函数之前声明、定义;传参时也需要定义变量;自创函数必须放进主函数里面才能运行
Python的函数定义需要def;传参时不需要定义变量;Python没有主函数,需要自创函数时直接调用就行
十一、返回值
C语言return语句只能返回一个值
Python的return可以同时返回多个值,其本质是一个tuple(元组)。但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便
十二、结构体与字典
C语言里面相同类型或不同类型的数据构成的数据集合叫做结构体,将有固定关系的数据放在一起,作为一个整体
struct xxx{
};
Python里面通过键值对储存相同类型或不同类型的数据
dict = {key:value}
十三、灵活的Python
Python可以通过强大的函数库进行C语言无法简便操作的转换,如用dict转换成字典,用list转换为列表
十四、迭代器与指针
根据亲身体验加上网上查找资料,我自认为可以把C语言的指针看成一种泛型迭代器。
C语言指针的本质就是内存地址,它输出的是地址,得到的结果是地址里面保存的数据
Python的迭代器是可以被next()函数调用并不断返回下一个值的对象
之所以称指针为泛型迭代器,个人观点是因为:
遍历后不返回开头
然后可以next一个个走;,一步算一步
但是它会把算完的东西扔了,不保留
但是指针会给地址保留等原因
每个人都有自己的理解,明白就行
十五、生成器
C语言没有生成器
Python的生成器十分强大,generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素
这意味着Python的生成器可以节省大量的内存,并提高运行速度。但与此同时,生成器的复杂程度也是很高的,常见的错误:
generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行
调用generator函数会创建一个generator对象,多次调用generator函数会创建多个相互独立的generator
如果想要拿到返回值,必须捕获StopIteration错误,返回值包含在StopIteration的value中
十六、元组和集合
C语言都没有(应该)
Python元组可以理解成进阶版列表,因为其不可轻易更改,因此相比于列表,优势是不用多说的
Python集合是为了方便将列表里的元素进行数学运算
2