對(duì)于初學(xué)編程的同學(xué)來(lái)說(shuō),有一個(gè)很大的難點(diǎn),那就是無(wú)法理解每一段代碼什么意思,能實(shí)現(xiàn)什么功能。能否理解執(zhí)行每段代碼的功能相當(dāng)關(guān)鍵,這一點(diǎn)對(duì)于學(xué)習(xí)編程語(yǔ)言的同學(xué)來(lái)說(shuō),應(yīng)該頗有感觸。本文就給大家?guī)?lái)一款神器,可以讓初學(xué)者輕松理解每一段代碼實(shí)現(xiàn)的功能過(guò)程。
實(shí)現(xiàn)一個(gè)排序、回溯、遞歸算法,它執(zhí)行的過(guò)程到底是什么樣的?為什么有的測(cè)試用例總是過(guò)不去?
手動(dòng)一步一步寫(xiě)出來(lái)顯然是很繁瑣的,要么就借助IDE
,把每一步的執(zhí)行結(jié)果以調(diào)試日志的形式輸出到控制臺(tái),看一下每一步到底發(fā)生了什么。
曾經(jīng)看過(guò)一則消息,VS Code
正準(zhǔn)備加入可視化調(diào)試過(guò)程這項(xiàng)功能,這讓我頗為期待,但是目前還無(wú)法提供這項(xiàng)功能。
python Tutor
Python Tutor
是一款在線(xiàn)的代碼執(zhí)行過(guò)程可視化工具。
def listSum(numbers):
if not numbers:
return 0
else:
(f,rest) = numbers
return f * listSum(rest)
myList = (1,(2,(3, None)))
total = listSum(myList)
你可以把上面這段代碼黏貼到 python Tutor
的編輯框點(diǎn)擊Visualize Execution就可以動(dòng)態(tài)的執(zhí)行你的代碼,并且實(shí)時(shí)展示每一步的執(zhí)行過(guò)程。
變化的效果如下圖(實(shí)現(xiàn)過(guò)程圖片過(guò)來(lái),節(jié)選其中幾張):
整個(gè)程序數(shù)變動(dòng)的過(guò)程活生生呈現(xiàn)你眼前,夠明了了吧。
python tutor 我多作為程序出現(xiàn)自已解釋不了的錯(cuò)誤,在網(wǎng)站上運(yùn)行一次,執(zhí)行過(guò)程對(duì)比,查找錯(cuò)誤原因,又快又準(zhǔn)。
然后,這款工具的名稱(chēng)為 Python Tutor
,但是,它支持的語(yǔ)言卻不止 Python
這一種。它目前支持如下編程語(yǔ)言:
- Python
- Java
- C
- C++
- JavaScript
- TypeScript
- Ruby
其中,支持比較全面的就是 Python
,對(duì)于 Python
,它支持 Python 3.6
、 Python 2.7
、 Python with Anaconda
。
Python是一門(mén)對(duì)第三方包依賴(lài)很強(qiáng)的一種編程語(yǔ)言,因此,在開(kāi)發(fā)過(guò)程中會(huì)經(jīng)常用到 numpy
、 pandas
、pprint
等工具包。默認(rèn)的 Python 3.6
和 Python 2.7
只有一些標(biāo)準(zhǔn)庫(kù),沒(méi)有第三方包。
所以,如果你執(zhí)行的代碼片段中用到了第三方工具包,可以選擇 Python with Anaconda
,這是因?yàn)?Anaconda
默認(rèn)會(huì)安裝常用的工具包。
但是,使用 Python with Anaconda
的速度會(huì)慢一些。
在我個(gè)人看來(lái),這個(gè)工具比較適合編程初學(xué)者,例如面臨校招的同學(xué),這個(gè)工具對(duì)于熟悉編程幫助很大,可以加快你的學(xué)習(xí)效率,提升對(duì)編程語(yǔ)言的理解。
最后推薦一下上述7門(mén)編程語(yǔ)言的教程,感興趣的同學(xué)可以看一下:
- Python教程:http://m.hgci.cn/python/
- Python微課:http://m.hgci.cn/minicourse/play/python3course
- Java教程:http://m.hgci.cn/java/
- Java微課:http://m.hgci.cn/minicourse/play/javaminicourse
- C教程:http://m.hgci.cn/c/
- C++教程:http://m.hgci.cn/cpp/
- C++微課:http://m.hgci.cn/minicourse/play/cppminicourse
- JavaScript教程:http://m.hgci.cn/javascript/
- JavaScript微課:http://m.hgci.cn/minicourse/play/jscourse
- TypeScript教程:http://m.hgci.cn/typescript/
- TypeScript微課:http://m.hgci.cn/minicourse/play/tsminicourse
- Ruby教程:http://m.hgci.cn/ruby/
- Ruby微課:http://m.hgci.cn/minicourse/play/rubycourse