日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

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

發(fā)布時(shí)間:2023/12/3 C# 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python和c#哪个简单-最近学习 Python 的一些感触 (对比 C#) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

反駁下Pythoner說的簡(jiǎn)單

之前很多人都說Python用起來簡(jiǎn)單,我的第一感覺就是胡扯,現(xiàn)在我稍微學(xué)了一點(diǎn),更加堅(jiān)信了那是胡扯。

當(dāng)然Python在很小很小的項(xiàng)目里面可能是簡(jiǎn)單,例如Python寫一個(gè)HelloWorld,其只要一句print "HelloWorld"就行了,而在C#里面,由于語法限制,其需要一個(gè)命名空間、一個(gè)類、一個(gè)Main函數(shù)和一句Console.WriteLine("HelloWorld");才能完成一個(gè)控制臺(tái)輸出HelloWorld的程序,但是倘若我們?nèi)ネ瓿梢粋€(gè)稍微大一點(diǎn)的項(xiàng)目,那就不一定了。

例如我們要完成讀取Excel中一張名為XXX表中的數(shù)據(jù),在雙方都不使用第三方框架的情況下,同時(shí)C#不使用ADO.NET技術(shù),那么雙方實(shí)現(xiàn)讀取Excel的困難程度應(yīng)該是差不多的,但是如果允許使用第三方類庫(kù)(備注:1、使用免費(fèi)的第三方類庫(kù),因?yàn)镃#有個(gè)收費(fèi)類庫(kù)讀取Excel只需要一兩行代碼就能完成;2、C#不使用ADO.NET技術(shù)),那雙方的代碼量應(yīng)該是差不多的。

因此說Python用起來簡(jiǎn)單,那是無稽之談,真正使開發(fā)變得簡(jiǎn)單的是第三方類庫(kù),而對(duì)于Python、C#(除了.Net Core外)來說,其第三方類庫(kù)都是充足的,因此其開發(fā)應(yīng)該都是差不多的。

Python與C#之間的不同點(diǎn)

1、程序的運(yùn)行生命周期可以分為編譯時(shí)、鏈接時(shí)、加載時(shí)、運(yùn)行時(shí),這4個(gè)階段。在Python中,這4個(gè)階段是一體的,而在C#中卻是嚴(yán)格分離的,在C#要想跨階段執(zhí)行則就需要用到反射。這就造成了兩者之間具有很大的不同。備注:不討論C#中dynamic這樣的動(dòng)態(tài)類型。

例如依賴注入,在靜態(tài)語言中依賴注入的價(jià)值體現(xiàn)在其通過IoC把對(duì)象對(duì)接口及實(shí)現(xiàn)的依賴反轉(zhuǎn)為對(duì)DI容器的依賴,通過在DI容器中注入,從而獲得對(duì)象的實(shí)現(xiàn),即其將對(duì)象的索取從編譯時(shí)、加載時(shí)轉(zhuǎn)移到了運(yùn)行時(shí)。而對(duì)于像Python這樣的動(dòng)態(tài)語言,由于其各個(gè)階段是一體的,從而使得其本身的運(yùn)行環(huán)境就好比是一個(gè)DI容器。

2、由于1的原因,Python可以實(shí)現(xiàn)類型之間的快速切換,而C#卻需要通過相應(yīng)的類型轉(zhuǎn)換才能實(shí)現(xiàn)。備注:無視C#隱式類型轉(zhuǎn)換

例如int和long之間的切換

num=2147483647

num=num+1

Python:2147483647是int的上限值,當(dāng)其+1后,這個(gè)num變量會(huì)自動(dòng)轉(zhuǎn)變?yōu)閘ong類型

int num=2147483647;

num=num+1;

而如果C#寫成這樣,其程序在運(yùn)行到num=num+1;時(shí),便會(huì)出錯(cuò)

int num=2147483647;

long numLong=(long)num+1;

我們只有先將num轉(zhuǎn)化為long類型,然后+1,并賦值給新的對(duì)象,這樣我們才能獲得正確的值2147483648。

3、同樣由于1的原因,Python無法做靜態(tài)類型檢查,而C#卻會(huì)進(jìn)行靜態(tài)類型檢查。

這使得C#在編譯時(shí)就能發(fā)現(xiàn)相應(yīng)的類型錯(cuò)誤,而Python卻只能在程序運(yùn)行時(shí)才能發(fā)現(xiàn)。

對(duì)于Python的這一點(diǎn),其就好像是一把雙刃劍,雖然這免去了類型約束,便于寫代碼,但是這也使得代碼變得更難維護(hù)。這也是“動(dòng)態(tài)類型一時(shí)爽,代碼重構(gòu)火葬場(chǎng)”的由來。

4、Python沒有訪問修飾符,而C#有public、private、internal、protected、protected internal等的訪問修飾符。

訪問修飾符可以起到對(duì)相關(guān)內(nèi)容訪問的控制作用。但是Python卻沒有,有人說__是私有什么的,那其實(shí)是偽私有,換個(gè)寫法就又能進(jìn)行訪問了,因此Python中相關(guān)內(nèi)容的訪問全靠編程者的自覺,同時(shí)編程者也必需知道哪些內(nèi)容可以訪問,哪些內(nèi)容不可訪問。

5、Python沒有interface,其只能類繼承,同時(shí)其還支持多繼承,而C#只能單繼承,一個(gè)類只能繼承一個(gè)類,當(dāng)然C#為了彌補(bǔ)單繼承的不足,還帶來了interface,一個(gè)類可以繼承多個(gè)interface。

有關(guān)Python的抽象類多繼承和C#的interface多繼承,這2者之間的區(qū)別就不多說了,區(qū)別還是比較大的。

Python的多繼承會(huì)增加代碼的復(fù)雜度,再加上Python沒有訪問修飾符,這也就變相要求了編程者的能力,尤其是當(dāng)項(xiàng)目越來越大,需求越來越多,業(yè)務(wù)越來越復(fù)雜的時(shí)候。

6、Python沒有泛型,或者說不需要泛型,而C#卻有泛型。

對(duì)于這一點(diǎn)沒什么好說的,Python不需要泛型的理由就是之前提到的1、2這兩點(diǎn),即由于其所有變量簽名都是動(dòng)態(tài)的,因此對(duì)于Python來說,其不需要泛型。

總結(jié):

1、Python是一門非常靈活的動(dòng)態(tài)語言及動(dòng)態(tài)類型語言。Python為了其靈活性,拋棄了很多東西,因此我認(rèn)為這靈活性就相當(dāng)于一把雙刃劍,真正要想掌控好這門語言還是挺難的。

2、除了上面說的不同點(diǎn)外,其實(shí)Python和C#之間還有很多其他的不同點(diǎn),具體的不說了,在這兒我想說的是他們兩者的編程思維也因此發(fā)生很大的不同。所以如果你目前只會(huì)動(dòng)態(tài)語言,那就去學(xué)一門靜態(tài)語言看看吧;如果你目前只會(huì)靜態(tài)語言,那就去學(xué)一門動(dòng)態(tài)語言看看吧,只有動(dòng)靜結(jié)合方能大成/滑稽

總結(jié)

以上是生活随笔為你收集整理的python和c#哪个简单-最近学习 Python 的一些感触 (对比 C#)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。