nim與python的異同
名詞:方法與函式同義.僅僅是語言規定差異.在本文中不做區別.
1. python都是指def定義的處理過程
2. nim的 proc有返回值, func沒有返回值(0.19版之後出現)
3. c++的[方法(method)]專指類中的函式.
4. pascal的方法(procedure)指無返回值的處理,函式(function)指有返回值的處理
5. c中的方法(function)指無返回值的處理,函式(function)指有返回值的處理
主模組的判斷
- python
if __name__ == “__main__”:
pass
- nim
if isMainModule:
discard
空程式碼-為保持縮排的佔位符
- python
pass - nim
discard
縮排:
- python用4個空格
- nim用2個空格
文字串的格式化常用形式:
- python:
- print “hello, %s!”%(“ world”) #python2
print(“hello, %s!”%(“ world”)) #python3
print(“hello, {}!”.format(“ world”)) #python3 - print(“hello, {0}! your name is {1}.”.format(” world”,”rock”)) #python3
- nim也有類似用法:
- echo(“hello, $1!” % “ world”)
或者不加括號也可以
echo “hello, $1!” % “ world” - echo “Hello, $2! your name is $1.” % [“rock”,”world”] #輸出順序變化了
nim裡文字串的操作符%不是預設操作符,需要在使用前引入strutils包.否則不能使用,在編譯時會報錯.
import strutils
這樣就會給為文字串增加很多功能, 比如上面的%操作符
方法呼叫:
- python是傳統的[物件.方法]呼叫寫法
- nim 既可以用傳統OOP風格的[物件.方法],也可以用[方法(物件)/方法 物件]呼叫,這被稱為UFCS(Uniform Function Call Syntax-通用方法呼叫語法).後一種風格類似C或pascal等命令/指令程式語言,兩者效力與結果相同, 比較靈活.
UFCS
-
要求方法(proc)或函式(func)的第一個引數是要操作的型別.
proc len2(value:string):int = 處理過程省略 let a = “” #a的型別自動推導. 等同於 let a:string = "" len2(a) == a.len2 #nim可以不寫函式呼叫的括號
- 類的方法(proc/func/method)要求第一個引數是類的型別.
-
python
class Person: def makelove(self, spouse)→Person: # python3寫法 省略 person = Person() baby = person.makelove(spouse)
-
nim
type Person = object proc makelove(self:Person, spouse:Spouse):Person = 省略 person = Person() baby = person.makelove(spouse) #或者 baby = makelove(person)
模組匯入
- python
-
import os
os.exists(“./testfile”)
-
from os import *
匯入該模組下的所有內容
exists(“.testfile”) # 這裡使用os模組內的函式[exists]不需要加上模組名字首 - import json as jn #將模組引入後起個別名使用
- from os import path
- from os import path as syspath
- nim
-
from os import nil #等同於python的[import os].這裡不匯入模組內的內容,而只是將模組本身匯入.
os.existsFile(“./testfile”)
如果不加上[import nil]那麼預設是匯入該模組下的所有內容,而不需要在呼叫之前加上模組名
-
import os
import os # 這裡匯入os模組
existsFile(“.testfile”) # 這裡直接使用os模組內的函式[existsFile].
等同於python的[from os import *] - import parseutils as pu import nil #將模組引入後起個別名使用
- from os import existsFile
- from os import existsFile as exfile