C语言和Python语言有什么区别呢?

C语言和Python语言有什么区别呢?最近几年 python 语言非常受大家欢迎 所以我也想学习了解下 python 语言 但是学习之前总是有很多疑问 因为我现在只会汇编和 C 语言 所有我想在学习它之前先了解一下 python 和我常用的 C 语言有什么不一样的地方 有什么优点 以及它可以应用在哪些领域等等 所以我上网查了一下相关话题 在知乎上找到了一个比较被大众接受的回答 所以赶快收藏起来 作者从以下三个进行了阐述 区别 一 C 属编译型语

最近几年python语言非常受大家欢迎,所以我也想学习了解下python语言,但是学习之前总是有很多疑问。

因为我现在只会汇编和C语言,所有我想在学习它之前先了解一下python和我常用的C语言有什么不一样的地方,有什么优点,以及它可以应用在哪些领域等等。

所以我上网查了一下相关话题,在知乎上找到了一个比较被大众接受的回答,所以赶快收藏起来;作者从以下三个进行了阐述:

区别:

一.

C 属编译型语言;
Python 属解释型语言;
这点其他答主提过,确实是重要的区分点。编译型和解释型,在编程时的最大区别是必不必要写一个入口函数,在C语言里是 main,而 Python 可以不写。

编译型的优点是“静态”,代码不能一行一行编译执行,必须作为整个工程来编译,这样便于类型检查,降低运行时错误率;运行时效率更高,因为编译器可以统筹各个方面,生成更优化的机器指令;一经编译便可直接以机器语言再次执行。

解释型语言的优点是“动态”,代码的每一行可独立执行(代码块除外)。这样就可以灵活地进行实时交互,调整正在运行的程序,进行实时、异步的调试。

比如 Python 的 CLI(命令行交互界面)就可以直接输入 Python 代码执行。这是 C 语言这样的编译语言难以做到的(调试模式下可以做到 C 表达式的实时计算,但达不到解释型语言的灵活度)。解释型语言的特性还让其适合做脚本语言。

二者的缺点则互为对方占优的方面。编译型需要大量的编译时间,不够灵活。在大项目中,需求的更改可能导致巨大的重新编译时间。不过这被运行效率弥补,没有其他更大的缺点。而解释型语言被诟病得相对较多,比如因为不能事先编译,执行时都要先解释(本质上就是对单行的编译)成机器代码再执行,因此效率低很多。

不过针对这点,Python 现在会像编译型语言一样把第一次执行时产生的字节码(虚拟机器代码)输出到 .pyc 文件,下次若源文件未改变,可直接执行字节码文件,从而提升了运行效率。

另外,解释型语言难以实现静态类型检查,所以容易产生运行时错误,因此相对不适合用来做大项目。其实非要让编译型语言也能支持命令行交互也并非不可能——Haskell就是这样一个异类。它不仅能单行执行,甚至还能做静态类型检查,这个会在后面提到。

二.

C 是弱类型静态类型检查的;
Python 是强类型动态类型检查的;
对于不了解的人来说,这种说法可能会引起质疑。来一条一条看。

扯远了。知道 C 中的类型大体就是各种整数,就能想到各种整数可以互相转化:int 转化 long 很好理解,charint 也经常互相转换,那你想过 int 能与任何一种指针强制转换吗?而这是源于 int 是最常用的整数类型,而地址也是最重要的机器整数。你还知道 void* 能与任何指针类型转换吗?其实所有的指针都可以任意互相转换,这意味着看似类型系统严格的 C 实际上并没有限制你去滥用它。这也不一定是滥用——库函数 malloc 的返回类型就是 void*,它表示你可以将它看作任何类型的指针。那不同指针能相互转化又怎样呢?我们知道 Python 里的对象是一系列属性和方法的集合,这在 C 中类似于结构体。对象的名字相当于指向它在内存中实体的指针——相当于结构体指针。不同结构体指针可以任意转化意味着……对,一个变量名可以代表任何对象,这不就是弱类型嘛!那什么叫静态类型检查呢?对,就是那个让你饱受编译错误苦恼的东西。我说过编译型语言是“静态”的,所以静态类型检查只可能在编译型语言实现(前述,Haskell 是个杂糅者,它是编译型语言,但又可以单行执行)。C 要求你写出每个变量、函数的类型,就是为了类型检查。但并不是静态类型检查就一定要标注类型(如 Haskell 就几乎完全可以不写)。

Python “动态类型”,我可以理解,因为写的时候完全不用声明类型嘛。但你说它「强类型」?这我可不服了,哪个「强类型」语言可以随意给变量赋任意值的?前面说过,储存对象的变量实际上只是储存对象在内存中的地址(而「值类型」,如小整数,一般直接存储值)。变量存储在「栈」中,对象被放在「堆」中。「栈」是一个个整齐叠放的,「堆」是随机开辟的。当我们执行 a = [1,2,3] 这样一条语句,Python 运行环境在「堆」中生成新的 list 对象,将对象的首地址返回,赋给新变量 a 压入栈中。之后若执行 a = { 'x': 1 },只不过是将 a 中的地址换成字典对象的罢了。所以变量能储存任意对象不是因为变量本身能随意改变,而是指针可以指向任何东西。

三.

Python 是原生支持面向对象范式的语言,C 不是。
我没有说“Python 是面向对象语言,C 是面向过程语言”,因为面向对象和面向过程是编程模型和思想,Python 程序也能写得很“过程”,C 也有多种方法实现“面向对象”。但 Python 是原生支持面向对象范式的,它有 class 的封装,有继承、多态方法。C 要实现面向对象的特性,需要一些技巧。有一个知乎回答,我从它的第一个链接的 PDF 得到了很大启发。回答已经找不到了,但那个 PDF 还存着,书名叫《Object-Oriented ANSI-C》。

  • C 更偏向底层,抽象和语法糖更少,使用起来不如 Python 方便。但 C 更简单,如果有计算机体系的知识,精通起来比 Python 可能更容易。
  • C 的语法不如 Python 简洁。
  • C 函数声明的先后顺序影响其可被调用的区域,Python 不会。
  • C 需要自己维护堆内存,Python 有垃圾回收机制。
  • C 的跨平台性不如 Python(对于使用这两个语言的程序员而言),因为 C 是大多数操作系统的实现语言,各操作系统会提供标准之外的系统调用库,而不同操作系统上系统库中的函数和定义不同。Python 基于虚拟机执行字节码,只要官方提供了某操作系统的虚拟机实现,就能将 Python 代码无缝在各操作系统转移(os.system 等涉及特定操作系统的东西除外)。
  • C 除预编译指令外可以压缩到一行,Python 要用游标卡尺。。。等等

应用领域

对C语言和python语言的区别大致有了点点了解之后,又看了下它的主要应用领域

  1. Web开发
    小编我是从事Python Web开发的,所以把它放在了第一位。尽管今天PHP依然是Web开发的流行语言,但Python上升势头更劲。随着Python的Web开发框架逐渐成熟,比如耳熟能详的Django和flask, 你可以快速地开发功能强大的Web应用。小编我首推Django,强烈建议所以有志于从事Python Web开发的人掌握这门框架。无论是建大型网站,开发OA或Web API,Django都可以轻松胜任。
  2. 网络爬虫
    多亏有了Python,一个小白用几行代码就可以写个爬虫爬段子爬福利图了。然而爬虫的真正作用是从网络上获取有用的数据或信息,可以节省大量人工时间。能够编写网络爬虫的编程语言有不少,但Python绝对是其中的主流之一。Python自带的urllib库,第三方的requests库和Scrappy框架让开发爬虫变得非常容易。
  3. 计算与数据分析
    随着NumPy,SciPy,Matplotlib等众多程序库的开发和完善,Python越来越适合于做科学计算和数据分析了。它不仅支持各种数学运算,还可以绘制高质量的2D和3D图像。和科学计算领域最流行的商业软件Matlab相比,Python比Matlab所采用的脚本语言的应用范围更广泛,可以处理更多类型的文件和数据。
  4. 人工智能
    当前最热工资最高的IT工作就是从事人工智能领域的工程师了。Python在人工智能大范畴领域内的机器学习、神经网络、深度学习等方面都是主流的编程语言,得到广泛的支持和应用。最流行的神经网络框架如Facebook的PyTorch和Google的TensorFlow都采用了Python语言。你不学Python, 你会用那些框架吗?
  5. 自动化运维
    这几乎是Python应用的自留地,作为运维工程师首选的编程语言。在很多操作系统里,Python是标准的系统组件。大多数Linux发行版和MacOSX都集成了Python,可以在终端下直接运行Python。Python标准库包含了多个调用操作系统功能的库。通过pywin32这个第三方软件包,Python能够访问Windows的COM服务及其它WindowsAPI。使用IronPython,Python程序能够直接调用.NetFramework。一般说来,Python编写的系统管理脚本在可读性、性能、代码重用度、扩展性几方面都优于普通的shell脚本。
  6. 云计算
    Python的最强大之处在于模块化和灵活性,而构建云计算的平台的IasS服务的OpenStack就是采用Python的,云计算的其他服务也都是在IasS服务之上的。
  7. 网络编程
    Python提供了丰富的模块支持sockets编程,能方便快速地开发分布式应用程序。很多大规模软件开发计划例如Zope,Mnet, BitTorrent和Google都在广泛地使用它。
  8. 游戏开发
    很多游戏使用C++编写图形显示等高性能模块,而使用Python或者Lua编写游戏的逻辑、服务器。相较于Python,Lua的功能更简单、体积更小,然而Python则支持更多的特性和数据类型。Python的PyGame库也可用于直接开发一些简单游戏。

以上关于Python的应用转自知乎,原文链接;

学习资源推荐☟☟☟

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199939.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午11:52
下一篇 2026年3月20日 上午11:52


相关推荐

  • 最近做RTSP流媒体的实时广播节目

    最近做RTSP流媒体的实时广播节目

    2022年1月14日
    51
  • java:闰年判断程序[通俗易懂]

    java:闰年判断程序[通俗易懂]公历闰年的简单计算方法(符合以下条件之一的年份即为闰年)1、能被4整除而不能被100整除。2、能被400整除。方案:使用数学运算符取余运算(%),关系运算符等于(==)和不等于(!=),辑运算符逻辑与(&&)和逻辑或(||),来判断某年是否为闰年,判断的结果为boolean类型的值,如果为闰年boolean类型的值为true,否则为falsebooleanflag=(year%4==0&&year%100!=0)||year%400==0

    2022年7月17日
    15
  • Win10自动更新怎么永久关闭?有效的Win10强制更新关闭方法

    Win10自动更新怎么永久关闭?有效的Win10强制更新关闭方法之前小编为大家分享过一些Win10彻底关闭WindowsUpdate自动更新的方法,主要是通过一些如设置流量计费或借助一些专门的小工具来实现,但往往会发现,Win10自动更新就像打不死的小强,不管怎么关闭,之后还是会自动更新,让不少小伙伴颇为不爽。今天小编带来了这篇改进型教程,通过全方位设置,彻底关闭Win10自动更新,感兴趣的小伙伴不妨试试吧。…

    2022年6月18日
    36
  • 消息中间件(一)MQ详解及四大MQ比较

    消息中间件(一)MQ详解及四大MQ比较一 消息中间件相关知识 1 概述消息队列已经逐渐成为企业 IT 系统内部通信的核心手段 它具有低耦合 可靠投递 广播 流量控制 最终一致性等一系列功能 成为异步 RPC 的主要手段之一 当今市面上有很多主流的消息中间件 如老牌的 ActiveMQ RabbitMQ 炙手可热的 Kafka 阿里巴巴自主开发 RocketMQ 等 nbsp 2 消息中间件的组成 nbsp nbsp nbsp 2 1Broker 消息服务器

    2026年3月19日
    2
  • 8.2 使用MidJourney使用需要哪些能力?

    8.2 使用MidJourney使用需要哪些能力?

    2026年3月15日
    3
  • 常见网络协议汇总

    常见网络协议汇总常用网络协议前言 TCP IP 五层网络模型回顾应用层协议 DNS 协议 HTTP 协议 HTTPS 协议传输层协议 UDP 协议 TCP 网络层 IP 协议 ICMP 协议数据链路层 ARP 协议物理层整体的网络传输流程前言本篇博客将对基于 TCP IP 的五层网络模型中的常见协议做以总结 目的通过这些具体的协议更深刻的认识整体网络的传输流程及相关网络原理 TCP IP 五层网络模型回顾应用层 为用户为用户的应用进程提供网络通信服务协议 DNS 协议 HTTP 协议 HTTPS 协议传输层 负责两台主机之间的数据传输 将数据从发

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号