Python和C區別該如何理解?如何適應這種區別?
之前學習過一陣子C#,對那種需要聲明變數類型的語言感覺比較好接受。最近在學習Python時候,感覺看起來怪怪的,經常就不知道初始化了一個什麼東西(變數類型)
還有用Python自帶的編輯器,感覺很不方便,不像visual,eclipse這樣的用戶友好,可以有各種提示。我猜是我編譯器的問題,不知道有什麼新手用的推薦沒有。
到底是C#還是C?
Python是動態類型語言,用不慣很正常,自己腦子裡記著變數是什麼東西就行了
我學 Python 的時候也不習慣,寫代碼的時候總有種不安全的感覺,沒關係,多寫點 Python 代碼就習慣了。
寫 Python 個人推薦 PyCharm,對不遵守代碼規範的寫法有比較好的提示,適合初學者養成優秀的代碼習慣。
多說兩句。
顯式聲明類型與隱式聲明類型的語言各有優劣,與語言的設計和定位,以及歷史因素都有關係。
像 C/C++、Java 誕生的年代,編譯器非常弱,不能在編譯期做太多類型推斷。為了幫助編譯器做靜態類型檢查,才要求定義變數的時候顯式聲明類型。此外,在用繼承實現多態的語言里,顯式聲明類型也是定義多態變數的方式。
現在一些比較新的語言,像 JVM 平台上的 Kotlin、Scala,以及 Rust、Go 等等,很多都採取了 靜態強類型 + 隱式聲明類型 的設計。比如在 Kotlin 里:
val a = 100 // a 自動推斷為 Int 類型
Rust:
let a = 100 // a 自動推斷為 i32 類型
這些新語言吸收了學術界有關類型推斷的研究成果,能夠在編譯階段推斷出合適的類型。當然,推斷的能力也還有限,無法完全擺脫顯式類型聲明。
對於 Python 這樣的 動態強類型 + 隱式聲明類型 語言來說,它並不希望程序員太關心變數是什麼類型,是個變數你拿過來用就行。這樣一來,雖然損失了一些類型安全,但也提高了語法的靈活性,讓寫 Python 代碼更加舒服,開發效率更高,寫出來的代碼也更短。這種設計的壞處在於一句話:「動態類型一時爽,代碼重構火葬場」,缺乏嚴謹帶來的安全。
個人感覺pycharm是比較好用的,當然用vs也是可以的
我剛開始寫py的時候也不是很習慣,有時候只能通過debugger看對象究竟是什麼
不過py3有個特性叫annotations,比如自定義一個函數:
def Foo(t:float)-&>np.ndarray:
這表明你想傳入的參數是float類型,返回參數是np.ndarray類型
這個時候如果你傳的不是float,那麼ide(比如pycharm)就會提醒你傳入的類型不對,起了一定程度上的助記作用
Python這類解釋型的語言適合快速搭建原型,快速完成那些用過即扔的小程序,或者寫一些對性能不很敏感的網路應用。
C這類編譯型的語言適合寫業務邏輯清楚明確,性能要求高,寫後不會經常變化的程序,或者是庫。一次編寫,長期運行。
Python的優點就是C的缺點,反之也一樣。解釋型語言確實寫起來很方便,但是由於類型自動推導,會造成一些bug不容易發現,有的只能在運行時刻才能爆發,對重要場合還是很讓人懊惱的。
編譯型語言能在編譯期發現更多問題,但也會花大量時間和代碼處理各種類型轉換的無聊問題,這點又是解釋型的優點。
編程語言的一個發展趨勢是編譯型和解釋型語言正在互相融合,彼此吸收借鑒,現在類型自動推導也在很多編譯型語言里有了。
可以結合C和Python使用,用C寫核心的功能,穩定不變的部分,封裝成庫,用Python完成頻繁變化的業務邏輯部分,C+Python是一對強大組合。
1、關於IDE和代碼編輯器
首先,動態語言對IDE依賴不大,可能的原因之一是代碼比較短小、精簡。對比來說肯定沒有C++或者C#那樣嚴重依賴語法提示。我覺得只要有語法高亮就足夠了,如果你嚴重依賴語法提示,再繼續做一段時間自然就拋開了,不需要在這方面糾結。
VS2017已經對Python有了很好的支持,畢竟IronPython貌似已經正規軍收編了(IronPython是一種基於.net技術的Python),CPython也能很方便地使用。總之用VS2017開發Python小程序挺爽的。
但是話說回來,項目大了以後,對象的方法和成員變數太多,還是需要提示的。這時候你可能需要藉助這個神器(而且是跨平台的 :),Linux下也隨便用 ):
2、Python語法不習慣?
學習Python的時候,一開始千萬不要拿它和C比較優劣,造成無謂的心智負擔。因為初學者知道的太少了,只是膚淺的一些表面區別,比如變數不寫類型等等。事實上:
- Python基本語法和C/C++/Java/C#等等語言是一致的,變數初始化、賦值、定義函數、調用函數等等,思想完全一樣,邏輯思維上不構成障礙。並不是像LISP那樣全新的思想。細節差異沒必要大驚小怪。
- Python/Ruby等強調開發效率的現代語言無一例外的採用了動態類型,而用了動態類型之後,對coder來說要求反而更高了,coder必須完全把握住變數類型、邏輯思路等等,否則很容易在運行時才發生異常。
- 但是一旦適應了,你會發現Python等語言真的可以做到「所思即所得」,在開發一些整理文件、文本處理、表格處理、圖像處理等小工具時,高手常常能短時間內輕鬆搞定,而如果用C進行一次性工具開發,心智負擔會高好幾倍。
剛剛看到輪子哥的一個回答,說程序員本來就要學100種語言。雖然是玩笑但是我非常贊同。
vczh:學了C#語言可以從事哪些工作?
掌握Python只會提高你的C語言、其他語言的功力,而不是相反。連C++資深級別的人物都同時掌握很多種程序語言,我們也沒必要庸人自擾。
我英語說的不好是因為我中文說的太6了……
python是面向對象的語言,任何變數都不能稱之為變數,其本質都是對象。而且變數確實也是要提前聲明的,只不過用雙引號或單引號的對象默認就認為是字元串,而不需要在前面再寫上string。為了方便,python允許在變數聲明類型的同時進行賦值。不服去看看PHP,或許你會更亂。至於語法習慣么,寫兩天就適應了,編輯器用sublime,atom,pycharm都挺好的。
應該是應用模塊的時候回帶入一些變數類型,比如應用pandas庫中函數讀csv文件會自動生成dataframe格式的變數,使用庫時可以先看看官方文件或者相關資料。python做數據分析挖掘可以用spyder,類matlab的界面,很好很方便。
區別就是:python是用c寫的
everything in python is object,almost every variable in python is reference...
各有優缺點,但是應用的話python更多一點。畢竟python編程效率更高,各種現成的庫和學習資源很多。IDE推薦Pycharm,在校學生的話憑校園郵箱可以免費獲得。
謝邀請!
很多人覺得,既然懂C了,那麼進一步掌握C++應該是水到渠成,但C++不是C的超集,而我又不喜歡C++的繁瑣和巨大,所以才決定看一看Python。我很喜歡Python的優雅與快捷。
語言類型
和C不一樣,Python是一種動態類型語言,又是強類型語言。這個分類怎麼理解呢?大概是可以按照下列說明來分類的:
靜態類型語言
一種在編譯期間就確定數據類型的語言。大多數靜態類型語言是通過要求在使用任一變數之前聲明其數據類型來保證這一點的。Java和 C 是靜態類型語言。
動態類型語言
一種在運行期間才去確定數據類型的語言,與靜態類型相反。Python 是動態類型的,因為它們確定一個變數的類型是在您第一次給它賦值的時候。
強類型語言
一種總是強制類型定義的語言。Java 和 Python 是強制類型定義的。您有一個整數,如果不明確地進行轉換 ,不能將把它當成一個字元串。
弱類型語言
一種類型可以被忽略的語言,與強類型相反。VBScript 是弱類型的。在 VBScript 中,您可以將字元串 』12′ 和整數 3 進行連接得到字元串』123′,然後可以把它看成整數 123 ,所有這些都不需要任何的顯示轉換。
另外分享一個學習資料:
小白| Python+Matlab+機器學習+深度神經網路+理論+實踐+視頻+課件+源碼,附下載!
學Python,就像女追男,隔重紗。學C,就像男追女,隔重山。
咦?python還自帶編輯器?
住口,解釋性語言用個頭編譯器
- C# 也有var關鍵字聲明變數
- VS也可以寫Python,不過還是PyCharm用的爽一點
- 我個人的理解是C便向底層,你要知道底層發生了什麼,Python之類的腳本語言就是包裝了以或者說屏蔽了那些麻煩的操作,讓你專註於問題。
- 代碼寫多了就適應了
一種是弱類型,一種是強類型。學習多種語言的時候,確實會有這種困惑,尤其都是面向對象的語言,比如C++/java/python/lua,大致語法都差不多,但總有那麼幾點不一樣,其實也不用糾結,懵逼的時候google一下,不丟人。你要是百度的話,就丟人了,逃。。。
推薦閱讀:
※現在有人工智慧可以與人對戰圍棋嗎?
※在人工智慧和機器學習領域中國和國外存在哪些差距?有多大?
※目前,主流的人工智慧機器翻譯團隊在近一年內主要突破和攻關的技術方向是?
※本科數學,想從事人工智慧或大數據方面的工作,該怎麼規劃?
※國際象棋和圍棋都已經進行過「人機大戰」了,之後還有什麼遊戲值得人工智慧挑戰嗎?