官术网_书友最值得收藏!

1.5 使用REPL

Read-Eval-Print-Loop(REPL)是一個交互式shell,類似于Python或Swift的Playground,提供了測試代碼片段的功能。Julia在后端提供了一個帶有JIT編譯器(由Julia使用)的交互式shell。我們可以在一行中輸入、編譯,結果在下一行中給出。Julia命令行界面如圖1-13所示。

圖1-13 Julia命令行界面

只要在終端鍵入julia,就可以輕松啟動Julia的shell。在打開shell時,會顯示Julia標志和有關版本的信息。這里的“julia>”是Julia提示符,類似于Python中的“>>>”,我們可以在其后面編寫表達式、語句和函數,就像在代碼文件中編寫一樣。REPL的好處是可以測試代碼是否存在錯誤,適合初學者快速上手。另外,Julia包或自定義編寫的Julia程序可以使用include包含在REPL中。接下來,我們打開文本編輯器來編寫第一個Julia程序,具體如范例1-1所示。

【范例1-1】第一個Julia程序

這里定義了一個helloworld函數,為后面include包含命令的測試做準備。

01  function helloworld()
02      println("你好Julia")
03  end

代碼01行定義了一個helloworld函數,02行調用了println函數輸出數據,03行的end用來標記函數結束。

我們將其保存為名為hello.jl的文件。現在不用糾結于具體的語法,這里僅僅定義了一個函數并讓其輸出一行“你好Julia”。接下來,在REPL中將這個文件包含進來,并調用其中的函數,具體如圖1-14所示。

圖1-14 在REPL中包含Julia文件

這里通過include函數將hello.jl包含進來,路徑視存儲hello.jl文件的位置而定。在包含文件之后,我們就可以在REPL中調用在該文件中定義的函數了。

當在REPL中包含文件時,可以看到它提供了有關文件中函數的信息,我們可以使用該功能將文件中所有函數的信息都打印到終端。Julia還會將所有在REPL中編寫的命令存儲在.juliahistory文件夾中,它位于Windows上的C:\Users\%username%目錄或者Linux和macOS上的~/.juliahistory目錄下。這一點與Linux終端類似,我們可以在Julia的shell中使用“Ctrl+R”組合鍵進行反向搜索,來找到之前執行過的命令。

1.5.1 在Julia中使用幫助

在Julia的REPL中還提供了一個功能,即幫助手冊(help),我們可以通過從鍵盤輸入“?”字符來使用這個功能。在輸入“?”后提示符將更改為:

     help?>

它提供Julia中函數、類型、宏以及運算符等的詳細信息。比如讓它顯示我們剛剛使用過的include函數信息,如圖1-15所示。

Julia還提供了使用REPL常規shell命令的功能,我們可以通過從鍵盤輸入“;”字符來使用REPL中的shell。在輸入“;”后提示符將更改為:

shell>

這里嘗試使用ls命令(在Windows中是dir)列出當前目錄中的文件,并嘗試通過ping與baidu.com進行數據通信,如圖1-16所示。通過REPL的這個特性,不用離開Julia就可以完成那些需要在終端完成的任務。

圖1-15 include函數信息

圖1-16 在Julia中使用shell

在Julia中還有一些交互式功能和宏,利用它們可以顯著地提高編碼效率,進而提升生產力。下面列出其中幾個比較有代表性的功能和宏。

? varinfo():顯示當前存在的全局符號信息,如圖1-17所示。

圖1-17 使用varinfo顯示全局符號信息

? @which:顯示函數定義的具體信息。比如下面的代碼,在代碼01行中,通過which命令來查詢sin函數的具體信息,02行顯示的就是sin函數的具體信息結果,包括函數名、參數類型、聲明位置等。

01  julia> @which sin(10)
02  sin(x::Real) at math.jl:204

? versioninfo():在啟動Julia REPL時,顯示一部分版本信息,如果想了解更詳細的信息,則可以使用versioninfo()。比如下面的代碼,在代碼01行中,我們調用了該函數,02~09行均為顯示結果。其中02行顯示了所使用的Julia版本,05行顯示了計算機的系統信息,06行顯示了計算機的CPU信息等。

01  julia> versioninfo()
02  Julia Version 0.7.0
03  Commit a4cb80f3ed (2018-08-08 06:46 UTC)
04  Platform Info:
05    OS: macOS (x86_64-apple-darwin14.5.0)
06    CPU: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
07    WORD_SIZE: 64
08    LIBM: libopenlibm
09    LLVM: libLLVM-6.0.0 (ORCJIT, skylake)

? edit("anyfileinhomedirectory"):用于編輯主目錄中的文件。默認打開的編輯器會根據所使用的操作系統而不同,比如在macOS中默認打開的是vim。

? less("anyfileinsamedirectory"):其類似于在shell中將文件顯示出來的應用程序。

? clipboard("some_text"):可以將一些信息復制到系統的剪貼板中。

? clipboard():可以將鍵盤內容粘貼到REPL中。在將一些命令從其他地方復制到REPL中時它很有用。

? dump():在屏幕上顯示Julia對象的信息。

? workspace():擦除我們之前聲明的所有變量,創造一個全新的、干凈的工作區。

1.5.2 REPL中的圖表

REPL的功能十分強大,甚至可以在REPL中創建圖表——雖然只是一些很簡單的圖表,但看起來相當不錯,并且僅占用少量的資源。要實現這個功能,需要添加一個包。我們可以通過下面這行代碼,添加繪圖所需要的包。

julia> Pkg.add("UnicodePlots")

UnicodePlots包由Christof Stocker提供。現在我們就用這個包來繪制一個簡單的圖表,如圖1-18所示。

圖1-18 在REPL中繪制圖表

我們可以使用UnicodePlots包創建很多類似的圖表,例如散點圖、線圖、直方圖等。在后面有關數據可視化的章節中,我們會介紹更多、更強大的繪圖包,用來處理更復雜的數據。

主站蜘蛛池模板: 英山县| 富锦市| 调兵山市| 乡城县| 睢宁县| 永年县| 上犹县| 镇巴县| 辽中县| 张家界市| 和顺县| 安溪县| 贞丰县| 台东市| 榆树市| 定兴县| 宣化县| 刚察县| 蒲城县| 淮北市| 无棣县| 长丰县| 宁波市| 胶南市| 和林格尔县| 阆中市| 珠海市| 伊春市| 都安| 增城市| 新宾| 嵩明县| 桐柏县| 凤山市| 涪陵区| 四子王旗| 军事| 海阳市| 沙湾县| 沾化县| 南江县|