摘要:了解代碼的執(zhí)行過(guò)程是編程的基本要求。還有種方法就是使用提供的調(diào)試功能,通過(guò)添加斷點(diǎn)和單步運(yùn)行,了解程序的運(yùn)行狀態(tài)。對(duì)于初學(xué)編程,難以理解程序運(yùn)行過(guò)程的苦手來(lái)說(shuō),絕對(duì)可稱(chēng)之為神器。每天共執(zhí)行和演示超過(guò)段程序。
了解代碼的執(zhí)行過(guò)程是編程的基本要求。一個(gè)熟練的編程老手只需要用肉眼看著代碼,就能對(duì)其運(yùn)行的過(guò)程有所了解。然而對(duì)于剛接觸編程不久的新手來(lái)說(shuō),這種事情就沒(méi)那么顯而易見(jiàn)了。于是在編寫(xiě)代碼和調(diào)試代碼時(shí),一旦程序的邏輯有些復(fù)雜,就像掉進(jìn)代碼的迷宮,完全不知道東南西北。
所以,每當(dāng)有人對(duì)自己的代碼沒(méi)有給出預(yù)想結(jié)果而百思不得其解,無(wú)奈尋求幫助時(shí),我都會(huì)建議在程序中增加輸出,一方面是根據(jù)不同輸出的先后順序來(lái)判斷程序的運(yùn)行路徑,另一方面則是觀察各變量在運(yùn)行過(guò)程中的實(shí)際數(shù)值,確認(rèn)是在哪里發(fā)生了錯(cuò)誤。
還有種方法就是使用 IDE 提供的調(diào)試功能,通過(guò)添加斷點(diǎn)和單步運(yùn)行,了解程序的運(yùn)行狀態(tài)。Visual Studio、Eclipse、xCode 等常見(jiàn)的 IDE 幾乎都提供了調(diào)試工具。對(duì)于 Python,也可以使用 pdb 庫(kù)來(lái)實(shí)現(xiàn)斷點(diǎn)調(diào)試。
上述兩種途徑應(yīng)該是大部分程序員 debug 時(shí)候的基本套路。但同樣的,對(duì)于新手來(lái)說(shuō),即使這樣的工具,用起來(lái)仍然有些費(fèi)力。
有時(shí)我會(huì)選擇在紙上畫(huà)出一些流程和圖形來(lái)向人解釋程序,雖然效果會(huì)好些,但顯然不是一種可以廣泛推廣的方式。后來(lái)意外發(fā)現(xiàn)有一款工具滿足了此類(lèi)需求,非常適合新手,可以讓你直觀地“看”出程序是怎么運(yùn)行的。對(duì)于初學(xué)編程,難以理解程序運(yùn)行過(guò)程的苦手來(lái)說(shuō),絕對(duì)可稱(chēng)之為“神器”。
這就是 Online Python Tutor 。一款免費(fèi)的在線代碼運(yùn)行及演示工具。
項(xiàng)目地址:pythontutor.com
關(guān)于此項(xiàng)目的介紹(摘自網(wǎng)絡(luò),出處未知):
Online Python Tutor 是由 Philip Guo 開(kāi)發(fā)的一個(gè)免費(fèi)教育工具,可幫助學(xué)生攻克編程學(xué)習(xí)中的基礎(chǔ)障礙,理解每一行源代碼在程序執(zhí)行時(shí)在計(jì)算機(jī)中的過(guò)程。通過(guò)這個(gè)工具,教師或?qū)W生可以直接在 Web 瀏覽器中編寫(xiě) Python 代碼,并一步一步可視化地執(zhí)行程序。截至 2013 年 12 月,來(lái)自 165 個(gè)國(guó)家和地區(qū)共 50 萬(wàn)多人使用了這個(gè)在線工具,通常是用作教材、講義或在線編程指南的補(bǔ)充。每天共執(zhí)行和演示超過(guò) 6,000 段 Python 程序。除了自學(xué)的初學(xué)者,Online Python Tutor 的用戶(hù)還包括了那些參加 Coursera、edX 和 Udacity 等在線課程的學(xué)生,還有諸如 MIT、UC 伯克利等高校的教師。
Python Tutor 支持 2.7 和 3.3 兩個(gè)版本的 Python。
除了 Python 外,還可運(yùn)行 Java、JavaScript、TypeScript、Ruby,另外也有支持 C、C++ 的版本。
可以通過(guò)一行 JS 代碼,把此工具嵌入到你自己的頁(yè)面中。
也可以生成鏈接,把你的代碼直接分享給別人。
附帶單元測(cè)試功能。
網(wǎng)站上還提供了很多的實(shí)例,其中包括一些比較經(jīng)典的算法。
再來(lái)體驗(yàn)一下其使用過(guò)程:
在編輯器里輸入代碼,點(diǎn)擊 “Visualize Execution” 即可運(yùn)行并演示。
import random def fn(x): return x**2 result = [] for i in range(3): t = random.randint(1, 10) print t r = fn(t) result.append(r) print result
我用了段包含循環(huán)、列表、函數(shù)、模塊的代碼片段??纯葱Ч绾危?/p>
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/44840.html
摘要:因?yàn)樗械臄?shù)據(jù)從最底層講是字節(jié),那么就可以使用字節(jié)流這個(gè)概念去指代數(shù)據(jù)動(dòng)態(tài)轉(zhuǎn)移這個(gè)過(guò)程。而數(shù)據(jù)的轉(zhuǎn)移,就是把一堆字節(jié)流從運(yùn)往。創(chuàng)建內(nèi)存中的中轉(zhuǎn)區(qū)域,然后將上面的文件的字節(jié)流直接接入到這個(gè)。然后再?gòu)陌炎止?jié)流輸出到對(duì)應(yīng)的。 I/O的很多操作和使用,其實(shí)并不是一個(gè)非常直觀的概念,特別是打開(kāi)文件、創(chuàng)建buffer。這對(duì)于終端用戶(hù)來(lái)講是個(gè)非常奇葩和奇怪的過(guò)程。我只是想要從一個(gè)文件里讀取內(nèi)容,從過(guò)...
摘要:關(guān)于本書(shū),我會(huì)寫(xiě)好幾篇讀書(shū)筆記用以記錄那些讓我恍然大悟的瞬間,本文是第一篇弄懂的作用域和閉包。作用域也可以看做是一套依據(jù)名稱(chēng)查找變量的規(guī)則。聲明實(shí)際上是根據(jù)你傳遞給它的對(duì)象憑空創(chuàng)建了一個(gè)全新的詞法作用域。 《你不知道的JavaScript》真的是一本好書(shū),閱讀這本書(shū),我有多次哦,原來(lái)是這樣的感覺(jué),以前自以為理解了(其實(shí)并非真的理解)的概念,這一次真的理解得更加透徹了。關(guān)于本書(shū),我會(huì)寫(xiě)好...
摘要:特別是所謂的不需要的引用可能會(huì)導(dǎo)致內(nèi)存泄漏,這意味著程序占用的內(nèi)存比實(shí)際需要的多,從而降低了內(nèi)存的效率。但是如果我們能夠意識(shí)到內(nèi)存泄漏的風(fēng)險(xiǎn),就可以采取措施將其刪除。意外的使用全局變量是導(dǎo)致內(nèi)存泄漏的一個(gè)常見(jiàn)原因。 作者:Bret Cameron翻譯:瘋狂的技術(shù)宅原文:https://medium.com/@bretcamer... 本文首發(fā)微信公眾號(hào):前端先鋒歡迎關(guān)注,每天都給你...
摘要:我開(kāi)始去關(guān)注一個(gè)問(wèn)題的最終目的是什么,得益于喬治波利亞的書(shū)如何解決這個(gè)問(wèn)題。在此基礎(chǔ)上,我也會(huì)制定了計(jì)劃,這也是喬治波利亞的另一個(gè)建議。明白為什么讓我對(duì)前后關(guān)系理解更深刻,幫助我成為一個(gè)見(jiàn)多識(shí)廣的程序員。 showImg(https://segmentfault.com/img/bVbvMKu); 原文鏈接: https://medium.com/free-code-camp... ...
閱讀 2114·2023-04-26 00:16
閱讀 3556·2021-11-15 11:38
閱讀 3235·2019-08-30 12:50
閱讀 3242·2019-08-29 13:59
閱讀 806·2019-08-29 13:54
閱讀 2595·2019-08-29 13:42
閱讀 3378·2019-08-26 11:45
閱讀 2248·2019-08-26 11:36