反驳下Pythoner说的简单

之前很多人都说Python用起来简单,我的第一感觉就是胡扯,现在我稍微学了一点,更加坚信了那是胡扯。

当然Python在很小很小的项目里面可能是简单,例如Python写一个HelloWorld,其只要一句print "HelloWorld"就行了,而在C#里面,由于语法限制,其需要一个命名空间、一个类、一个Main函数和一句Console.WriteLine("HelloWorld");才能完成一个控制台输出HelloWorld的程序,但是倘若我们去完成一个稍微大一点的项目,那就不一定了。

例如我们要完成读取Excel中一张名为XXX表中的数据,在双方都不使用第三方框架的情况下,同时C#不使用ADO.NET技术,那么双方实现读取Excel的困难程度应该是差不多的,但是如果允许使用第三方类库(备注:1、使用免费的第三方类库,因为C#有个收费类库读取Excel只需要一两行代码就能完成;2、C#不使用ADO.NET技术),那双方的代码量应该是差不多的。

因此说Python用起来简单,那是无稽之谈,真正使开发变得简单的是第三方类库,而对于Python、C#(除了.Net Core外)来说,其第三方类库都是充足的,因此其开发应该都是差不多的。

Python与C#之间的不同点

1、程序的运行生命周期可以分为编译时、链接时、加载时、运行时,这4个阶段。在Python中,这4个阶段是一体的,而在C#中却是严格分离的,在C#要想跨阶段执行则就需要用到反射。这就造成了两者之间具有很大的不同。备注:不讨论C#中dynamic这样的动态类型。

例如依赖注入,在静态语言中依赖注入的价值体现在其通过IoC把对象对接口及实现的依赖反转为对DI容器的依赖,通过在DI容器中注入,从而获得对象的实现,即其将对象的索取从编译时、加载时转移到了运行时。而对于像Python这样的动态语言,由于其各个阶段是一体的,从而使得其本身的运行环境就好比是一个DI容器。

2、由于1的原因,Python可以实现类型之间的快速切换,而C#却需要通过相应的类型转换才能实现。备注:无视C#隐式类型转换

例如int和long之间的切换

num=2147483647

num=num+1

Python:2147483647是int的上限值,当其+1后,这个num变量会自动转变为long类型

int num=2147483647;

num=num+1;

而如果C#写成这样,其程序在运行到num=num+1;时,便会出错

int num=2147483647;

long numLong=(long)num+1;

我们只有先将num转化为long类型,然后+1,并赋值给新的对象,这样我们才能获得正确的值2147483648。

3、同样由于1的原因,Python无法做静态类型检查,而C#却会进行静态类型检查。

这使得C#在编译时就能发现相应的类型错误,而Python却只能在程序运行时才能发现。

对于Python的这一点,其就好像是一把双刃剑,虽然这免去了类型约束,便于写代码,但是这也使得代码变得更难维护。这也是“动态类型一时爽,代码重构火葬场”的由来。

4、Python没有访问修饰符,而C#有public、private、internal、protected、protected internal等的访问修饰符。

访问修饰符可以起到对相关内容访问的控制作用。但是Python却没有,有人说__是私有什么的,那其实是伪私有,换个写法就又能进行访问了,因此Python中相关内容的访问全靠编程者的自觉,同时编程者也必需知道哪些内容可以访问,哪些内容不可访问。

5、Python没有interface,其只能类继承,同时其还支持多继承,而C#只能单继承,一个类只能继承一个类,当然C#为了弥补单继承的不足,还带来了interface,一个类可以继承多个interface。

有关Python的抽象类多继承和C#的interface多继承,这2者之间的区别就不多说了,区别还是比较大的。

Python的多继承会增加代码的复杂度,再加上Python没有访问修饰符,这也就变相要求了编程者的能力,尤其是当项目越来越大,需求越来越多,业务越来越复杂的时候。

6、Python没有泛型,或者说不需要泛型,而C#却有泛型。

对于这一点没什么好说的,Python不需要泛型的理由就是之前提到的1、2这两点,即由于其所有变量签名都是动态的,因此对于Python来说,其不需要泛型。

总结:

1、Python是一门非常灵活的动态语言及动态类型语言。Python为了其灵活性,抛弃了很多东西,因此我认为这灵活性就相当于一把双刃剑,真正要想掌控好这门语言还是挺难的。

2、除了上面说的不同点外,其实Python和C#之间还有很多其他的不同点,具体的不说了,在这儿我想说的是他们两者的编程思维也因此发生很大的不同。所以如果你目前只会动态语言,那就去学一门静态语言看看吧;如果你目前只会静态语言,那就去学一门动态语言看看吧,只有动静结合方能大成/滑稽

python和c#哪个简单-最近学习 Python 的一些感触 (对比 C#)相关推荐

  1. 零基础学python多久可以工作-零基础学习python,要多久才可以学好并且找到工作?...

    原标题:零基础学习python,要多久才可以学好并且找到工作? 零基础的你想学习python肯定很关注学习python的最短时间是多久,怎样才能快速学习python等问题,今天就为大家详细地回答一下这 ...

  2. 10开发Python老程序员教你学习Python的的几大秘诀

    Python 是一门优雅而又不失实用的语言,它语法简单很容易学会,又具有极高的可读性和灵活性.在知乎上 Python 是受关注最多的编程语言.很遗憾在我初学的时候没有知乎这样的平台提供这么多的资源,甚 ...

  3. 0基础学好python难不难_零基础学习Python难不难?Python有什么优势?

    原标题:零基础学习Python难不难?Python有什么优势? Python是一种计算机程序设计语言.首先,我们普及一下编程语言的基础知识.用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个 ...

  4. 为什么要学习Python编程语言?哪些人适合学习Python?

    先回答第一个被初学编程的朋友问到最多的问题,为什么要学习Python编程语言? 答:现在信息更新的非常快速,又迎来了大数据的时代, 各行各业如果不与时俱进,都将面临优胜劣汰,知识是不断的更新的,只有一 ...

  5. python多久能上手_小白学习Python,怎样能够快速入门上手

    原标题:小白学习Python,怎样能够快速入门上手 时至今日,Python已经成为最受欢迎的编程语言之一,清晰易读,适用广泛.在TIOBE 排行榜中位居第四,成为名副其实的人工智能第一语言. 那么零基 ...

  6. 谁的python入门教程好_怎样学习Python?Python入门必看

    Python目前可以用一个字来描述那就是"火",问题来了,这么火的语言零基础小白到底该怎样学习Python? 首先,从基础开始学习,切勿毛躁. 刚开始学习Python的时候,我们可 ...

  7. python哪一版好用-学习 Python 用哪本书好?

    目前在线教育.Github学习资源非常丰富,但是我依然认为学习Python过程中需要至少用心去看完一本书,文末有"惊喜". 因为,很多有关Python的在线教程都是出自个人或者无良 ...

  8. 0基础学python难吗-零基础入门学习Python技术难不难?

    原标题:零基础入门学习Python技术难不难? 近几年对python人才爆发式需求,导致很多人转行进入python开发行业,现如今Python这门语言的就业前景会非常好.相对于其他来说,它语法简单易读 ...

  9. python语言学了有用吗-转行学习Python开发有什么优势

    原标题:转行学习Python开发有什么优势 编程语言那么多,哪一个适合新手学习呢?哪些语言学完后好就业?其实对于这样的问题,一个简单的判断方法就是看市场需求什么,比如现在火热的人工智能行业,人工智能行 ...

最新文章

  1. 计算机网络期中考察方案,计算机网络期中考试题 b卷_ans.docx
  2. poj 1470(简单LCA 倍增法)
  3. Develop chrome extension study
  4. 【渝粤题库】国家开放大学2021春1703农村发展理论与实践题目
  5. linux磁盘符变化autofs,Linux基础教程学习笔记之Autofs自动挂载
  6. Python运行环境与异常处理
  7. mysql clickhouse_通过mysql操作clickhouse
  8. netcore之hello
  9. oracle数据库表空间追加数据库文件方法
  10. 初识SaltStack
  11. 软件测试中的接口分析,软件测试接口测试之管理类—叩丁狼分享
  12. 智慧监狱综合管理系统平台
  13. android 生成bks_在Android上实现SSL通信(二)
  14. 嗖嗖移动营业大厅(Java面向对象编程)
  15. 测试开发进阶——常用中间件概念——线程与线程池理解
  16. jquery自动监测输入字数,自动截取,输入框
  17. Linux生成校验文件asc,使用 GnuPG 加密签名来验证下载文件的可靠性和完整性
  18. Labview从入门到会用(一)——创建数据文件
  19. 视频号、抖音、快手狙击付费直播
  20. 轮廓中对踵点/旋转卡壳

热门文章

  1. spring jms 事务_Spring JMS:处理事务中的消息
  2. IDE日志分析方法pt。 2
  3. java 调试 工具_Java调试器–权威的工具列表
  4. JUnit 5 –基础
  5. 使用Spring Data的Apache Ignite
  6. JUnit 5 –参数化测试
  7. C#vs Java哪一个更快? 将25k C#转换为Java(2)
  8. 具有jOOQ和Java 8的CompletableFuture的异步SQL执行
  9. Java Singleton设计模式
  10. Java EE CDI限定词:快速浏览