企业建设门户网站成本如何,宁波专业做网站的公司哪家好,互联网建站是什么,it服务反驳下Pythoner说的简单
之前很多人都说Python用起来简单#xff0c;我的第一感觉就是胡扯#xff0c;现在我稍微学了一点#xff0c;更加坚信了那是胡扯。
当然Python在很小很小的项目里面可能是简单#xff0c;例如Python写一个HelloWorld#xff0c;其只要一句print 我的第一感觉就是胡扯现在我稍微学了一点更加坚信了那是胡扯。
当然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之间的切换
num2147483647
numnum1
Python2147483647是int的上限值当其1后这个num变量会自动转变为long类型
int num2147483647;
numnum1;
而如果C#写成这样其程序在运行到numnum1;时便会出错
int num2147483647;
long numLong(long)num1;
我们只有先将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#之间还有很多其他的不同点具体的不说了在这儿我想说的是他们两者的编程思维也因此发生很大的不同。所以如果你目前只会动态语言那就去学一门静态语言看看吧如果你目前只会静态语言那就去学一门动态语言看看吧只有动静结合方能大成/滑稽