Google Colaboratory+Nimで基本文法について勉強する(ライブラリ)
Google Colaboratory+Nimで基本文法(ライブラリ)について勉強します.
Google Colaboratory(以下Google Colab)は、Google社が無料で提供している機械学習の教育や研究用の開発環境です。開発環境はJupyter Notebookに似たインターフェースを持ち、Pythonの主要なライブラリがプリインストールされています。
引用元:Google Colabの使い方 (opens new window)
全国630店舗以上!もみほぐし・足つぼ・ハンドリフレ・クイックヘッドのリラクゼーション店【りらくる】
# nim4colabのインストール
Google Colab で nimコマンドを使用するためのライブラリであるnim4colabをインストールします.
%load_ext nim4colab により%を付けてNimのコマンドを使えます.
!pip install git+https://github.com/demotomohiro/nim4colab.git
%load_ext nim4colab
# nimpyのインストール
PythonからNimを呼び出すためのNimのライブラリ、nimpyをインストールします.
Nim初心者が始めるNimとnimpy (opens new window)
nimpyをインストールすることで、後述の fib.nim内で使っているnimpyをコンパイル、ライブラリとして使用することができます.
nimbleはNimのライブラリをインストールするためのコマンドです.
%nimble install nimpy -y
# Nimのライブラリ
# ライブラリとは?
ライブラリは、ある程度整理された処理を他のプログラムから読み込むことで、使うことが出来るようにしたファイルです。 Nimでは、Pythonと同じようにこのライブラリをインポートしてコードを書いていきます。
ライブラリは基本的に「import ライブラリ名」で使用できます。
# nimpy
nimのコードをPythonで使えるようにする.
# nim
# Google Colabでnimを使用するためのおまじない
%%nimc
# echo 'Hello, World'
echo "Hello, World"
echo "Hello, World"&"Hello, World" # &は文字列連結演算子
echo "Hello, World \nHello, World"
# echo '''Hello, World, Hello, World'''
# 実行結果
# Hello, World
# Hello, World
# Hello, World
# nim(関数定義)
# Google Colabでnimを使用するためのおまじない
%%nimc
# 返り値:result
proc HelloWorld(str1: string): string =
var text = "Hello World\n" & str1 # &は文字列連結演算子
result = text
# 返り値:return
proc HelloWorld2(str1: string): string =
var text = "Hello World\n" & str1 # &は文字列連結演算子
return text
# 返り値:関数名
proc HelloWorld3(str1: string): string =
var text = "Hello World\n" & str1 # &は文字列連結演算子
text
echo HelloWorld("mass")
echo HelloWorld2("mass")
echo HelloWorld3("mass")
# nimpy
proc HelloWorld(入力変数: 入力の型): 出力の型 {.exportpy.} =
入力値 | Nimの型名 |
---|---|
なし | void |
文字列 | string |
整数 | int |
リスト | seq[string] |
# セル内のをsample.nimとして書き出し
%%writefile sample.nim
import nimpy
# proc 定義
# 返り値:result
proc HelloWorld(str1: string): string {.exportpy.} =
var text = "Hello World\n" & str1 # &は文字列連結演算子
result = text
# 返り値:return
proc HelloWorld2(str1: string): string {.exportpy.} =
var text = "Hello World\n" & str1 # &は文字列連結演算子
return text
# 返り値:関数名
proc HelloWorld3(str1: string): string {.exportpy.} =
var text = "Hello World\n" & str1 # &は文字列連結演算子
text
# Writing sample.nim
コンパイル
# 関数をコンパイル
%nim c --tlsEmulation:off --app:lib --out:sample.so sample.nim
# output sample.so
!ls
nimpyの実行
# 作成・コンパイルしたsampleファイルをインポート
import time
import sample as sm # Nimでコンパイル
# 開始時間
start = time.time()
# *nimpyの実行
print(sm.HelloWorld('mass'))
print(sm.HelloWorld2('mass'))
print(sm.HelloWorld3('mass'))
# 終了時間
elapsed_time = time.time() - start
# 実行時間
print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")
# 出力結果
# Hello World
# mass
# Hello World
# mass
# Hello World
# mass
# elapsed_time:0.0008447170257568359[sec]
# sugar
sugarは、Nimの標準モジュールの1つです。
macroを使い、複雑なものを簡潔に書けるようにしています.
ここでは,リストの処理を実装している.
# python
nineNum = [1, 2, 3, 4, 5, 6, 7, 8, 9]
oddNum = []
for i in nineNum:
if i % 2 == 1:
oddNum.append(i)
print(oddNum)
# nim
# Google Colabでnimを使用するためのおまじない
%%nimc
import sugar
var nineNum = @[1, 2, 3, 4, 5, 6, 7, 8, 9]
var oddNum = collect(newSeq):
for i in nineNum:
if i mod 2 == 1: i
echo oddNum
# 実行結果
# @[1, 3, 5, 7, 9]
# strformat
文字列の扱いをしやすくするライブラリ
# python
a = 1
b = 2
print(f"a+b = {a + b}")
print(f"a-b = {a - b}")
print(f"a*b = {a * b}")
print(f"a/b = {a / b}")
print(f"a%b = {a % b}")
# nim
# Google Colabでnimを使用するためのおまじない
%%nimc
import strformat
var a = 1
var b = 2
echo fmt"a+b = {a + b}" #pythonのf-strings 要 strformat
echo fmt"a-b = {a - b}"
echo fmt"a*b = {a * b}"
echo fmt"a/b = {a / b}"
echo fmt"a%b = {a mod b}" # %ではなくmod, 結構罠
# 実行結果
# a+b = 3
# a-b = -1
# a*b = 2
# a/b = 0.5
# a%b = 1
# nimpy
# セル内のをsample.nimとして書き出し
%%writefile nimodule.nim
import nimpy, strformat
proc echoAxB(a, b: int): int {.exportpy.} =
echo fmt"a+b = {a + b}" #pythonのf-strings 要 strformat
echo fmt"a-b = {a - b}"
echo fmt"a*b = {a * b}"
echo fmt"a/b = {a / b}"
echo fmt"a%b = {a mod b}" # %ではなくmod, 結構罠
result = 1 # result は特別な変数で,この値が暗黙的にreturnされます.
# 関数をコンパイル
%nim c --tlsEmulation:off --app:lib --out:nimodule.so nimodule.nim
# output sample.so
!ls
import nimodule
a = nimodule.echoAxB(3,2)
print(a)
# 1
# まとめ
Google Colaboratory+Nimで基本文法(ライブラリ)について勉強しました.
# 参考サイト
Nimの特徴や使い方をわかりやすく解説! (opens new window)
Nim初心者が始めるNimとnimpy (opens new window)
Speeding up Python code with Nim (opens new window)
Nimを組み込んでPythonを高速化してみた (opens new window)
至高の言語、Nimを始めるエンジニアへ (opens new window)
Nim Compiler User Guide (opens new window)
スレッドローカルストレージ (opens new window)
PythonistaのためのNim入門 (opens new window)
Nimの便利な標準ライブラリ sugar (opens new window)
Nim初心者が始めるNimとnimpy (opens new window)
Nim 変数、定数の宣言方法(var, let, const) (opens new window)
Nimを知ってほしい2022 (opens new window)
nim いろいろなコメントの方法 (opens new window)