首先什么是REPL?
A Read-Eval-Print-Loop (REPL) is available both as a standalone program and easily includable in other programs. REPL provides a way to interactively run JavaScript and see the results. It can be used for debugging, testing, or just trying things out.
交互式解釋器(REPL)既可以作為一個獨立的程序運行,也可以很容易地包含在其他程序中作為整體程序的一部分使用。REPL為運行JavaScript腳本與查看運行結果提供了一種交互方式,通常REPL交互方式可以用於調試、測試以及試驗某種想法。
可以理解執行的交互式命令行界面,相當於一個DOS界面的Shell.
Python是支持REPL的語言
配置運行Python3.5
https://sublimerepl.readthedocs.io/en/latest/#installation
以上是SublimeREPL配置Lua語言的文檔
模仿這個可以配置Python3.5
首先Packages:Browse Package 找到 SublimeREPL的文件夾,再進入config文件夾,可以看到許多語言的配置文件,Python也在里面
在這里新建一個Python3.5的文件夾,在里面新建Default.sublime-commands和Menu.sublime-menu兩個文件(模仿Python文件夾)我們Python3.5目前只要能打開shell運行,和運行這個腳本,兩個功能,因此就只要包含Python3.5 和 Python3.5 – Run current file兩項就好了
Default.sublime-commands配置如下:
[
{
"caption": "SublimeREPL: Python3.5",
"command": "run_existing_window_command", "args":
{
"id": "repl_python3.5",
"file": "config/Python3.5/Main.sublime-menu"
}
},
{
"caption": "SublimeREPL: Python3.5 - RUN current file",
"command": "run_existing_window_command", "args":
{
"id": "repl_python3.5_run",
"file": "config/Python3.5/Main.sublime-menu"
}
}
]
Menu.sublime-menu配置如下:
[
{
"id": "tools",
"children":
[{
"caption": "SublimeREPL",
"mnemonic": "R",
"id": "SublimeREPL",
"children":
[
{"caption": "Python3.5",
"id": "Python3.5",
"children":[
{"command": "repl_open",
"caption": "Python3.5",
"id": "repl_python3.5",
"mnemonic": "P",
"args": {
"type": "subprocess",
"encoding": "utf8",
"cmd": ["python3.5", "-i", "-u"],
"cwd": "$file_path",
"syntax": "Packages/Python/Python.tmLanguage",
"external_id": "python3.5",
"extend_env": {"PYTHONIOENCODING": "utf-8"}
}
},
// run files
{"command": "repl_open",
"caption": "Python3.5 - RUN current file",
"id": "repl_python3.5_run",
"mnemonic": "R",
"args": {
"type": "subprocess",
"encoding": "utf8",
"cmd": ["python3.5", "-u", "$file_basename"],
"cwd": "$file_path",
"syntax": "Packages/Python/Python.tmLanguage",
"external_id": "python3.5",
"extend_env": {"PYTHONIOENCODING": "utf-8"}
}
}
]}
]
}]
}
]
注意Default.sublime-commands文件里的id 和Menu.sublime-menu文件里的id要一致,Menu.sublime-menu里的caption就是菜單欄的層級內容,cmd里的內容python3.5,就是你直接在ubuntu terminal里打的命令,而Default.sublime-commands文件里的file指向了Menu.sublime-menu文件,通過id和文件名,就可以找到相應命令的配置
保存文件后可以從菜單欄,Tools->SublimeREPL->Python3.5運行命令
為了和ctrl+B運行保持一致,可以使用
分成上下兩欄,上面寫代碼,下面運行結果,十分方便
設置key binding
每次這樣到菜單欄里去找,太慢,能不能像ctrl+B一樣直接運行呢?
可以的,只要設置快捷鍵就好了,在Preference->key Bindings-User里
寫上如下配置:
[
{"keys":["f4"],
"caption": "SublimeREPL: Python - RUN current file",
"command": "run_existing_window_command", "args":
{
"id": "repl_python_run",
"file": "config/Python/Main.sublime-menu"
}
},
{"keys":["f5"],
"caption": "SublimeREPL: Python3.5 - RUN current file",
"command": "run_existing_window_command", "args":
{
"id": "repl_python3.5_run",
"file": "config/Python3.5/Main.sublime-menu"
}
}
]
注意id還是要和Menu.sublime-menu文件里的id要一致,F4運行2.7 repl F5 運行3.5 repl
F4正常工作,但是F5確拋出了異常,當沒有響應或者出錯了的時候可以看看控制台
ValueError:No JSON Object could be decoded
這說明我們的python3.5 Menu.sublime-menu文件有問題,
使用了Json在線語法檢查器
它說是Menu.sublime-menu 里的注釋 // run files 不合法,去掉注釋后,F5也能正常運行了
多次運行的時候會出現如下的問題
can't open file '$file_basename': [Errno 2] No such file or directory
這個只要再次用鼠標點擊一下test.py就好了,就可以獲取運行的文件了
JSON語法與注釋
事實上,JSON文件只是記錄數據的格式,不適合像XML一樣作為配置文件,
Comments were removed from JSON by design.
I removed comments from JSON because I saw people were using them to hold parsing directives, a practice which would have destroyed interoperability. I know that the lack of comments makes some people sad, but it shouldn't.
Suppose you are using JSON to keep configuration files, which you would like to annotate. Go ahead and insert all the comments you like. Then pipe it through JSMin before handing it to your JSON parser.
Source: Public statement by Douglas Crockford on G+
之所以Sublime能支持帶注釋的json,可能是它在提交前解析過了,但是我們的異常來自Python3.3 說明python3.3里不支持解析這種帶注釋的json,因此以后還是不要加帶注釋的json了
JSON(JavaScript Object Notation)一種簡單的數據格式,比xml更輕巧。JSON它是一種輕量級的數據交換格式,非常適合於服務器與 JavaScript 的交互。JSON是JavaScript原生格式,這意味着在JavaScript中處理JSON數據不需要任何特殊的API或工具包。它易於人閱讀和編寫,同時也易於機器解析和生成。它基於JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個子集。 JSON采用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數據交換語言。
二、JSON的編寫規則
JSON的規則很簡單:對象是一個無序的"'名稱/值'對"集合。一個對象以"{"(左括號)開始,"}"(右括號)結束。每個"名稱"后跟一個":"(冒號);"'名稱/值'對"之間使用","(逗號)分隔。
規則如下:
1、映射用冒號(":)表示。名稱:值
2、並列的數據之間用逗號(",")分隔。名稱1:值1,名稱2:值2
3、映射的集合(對象)用大括號("{}")表示。
{
名稱1:值1,
名稱2:值2
}
4、並列數據的集合(數組)用方括號("[]")表示。
[
{名稱1:值,名稱2:值2},
{名稱1:值,名稱2:值2}
]
如圖就創建Object對象:總是以{開始以}結束,對象的每個屬性名與屬性值之間用英文的默冒號(:)分隔,多個屬性之間用英文的(,)隔開:語法格式如下:
student = {
name:"kouxiaolin",
age:22,
sex:"女"
}
備注:使用JSON語法創建對象時,屬性不僅可是普通的字符,而且可以是任何基本數據類型,還可以是函數,數組,甚至是另外一個用JSON語法創建的對象.
teacher = {
name:"xiaoqian",
Student:{
Name:"kouxiaolin",
Sex:"女"
},
//使用JSON為teacher對象分配一個方法
toString:function(){
alert("方法的測試…….");
}
}
JSON創建數組以英文的中括號[開始,然后以中括號]結束.其中放入數組的元素.元素之間用英文的逗號,分開最后的不需要英文逗號。
例如:
Arr = [value1,value2,value3,………]
JSON 使用 JavaScript 語法
因為 JSON 使用 JavaScript 語法,所以無需額外的軟件就能處理 JavaScript 中的 JSON。
通過 JavaScript,您可以創建一個對象數組,並像這樣進行賦值:
例子
var employees = [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName": "Carter" }
];
可以像這樣訪問 JavaScript 對象數組中的第一項:
employees[0].lastName;
返回的內容是:
Gates
可以像這樣修改數據:
employees[0].lastName = "Jobs";
cities =[
province1:{
name:"北京",
city[
"大興","昌平","朝陽","海淀","東城","西城"
]
},
province2: {
name:"河南",
city[
"鄭州","安陽","平頂山","開封","商丘","洛陽"
]
}
]
一個叫cities的數組 里有兩個對象,province1 province2:
province1有名字和城市兩個屬性,其中城市屬性是個數組,里面有"大興","昌平","朝陽","海淀","東城","西城 這些值