[原創][連載]nim與python的異同1

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:
  1. print 「hello, %s!」%(「 world」) #python2
    print(「hello, %s!」%(「 world」)) #python3
    print(「hello, {}!」.format(「 world」)) #python3
  2. print("hello, {0}! your name is {1}.".format(" world","rock")) #python3
  • nim也有相似用法:
  1. echo(「hello, $1!」 % 「 world」)
    或者不加括號也能夠
    echo 「hello, $1!」 % 「 world」
  2. echo "Hello, $2! your name is $1." % ["rock","world"] #輸出順序變化了
nim裏文字串的操做符%不是默認操做符,須要在使用前引入strutils包.不然不能使用,在編譯時會報錯.
import strutils
這樣就會給爲文字串增長不少功能, 好比上面的%操做符

方法調用:

  • python是傳統的[對象.方法]調用寫法
  • nim 既能夠用傳統OOP風格的[對象.方法],也能夠用[方法(對象)/方法 對象]調用,這被稱爲UFCS(Uniform Function Call Syntax-通用方法調用語法).後一種風格相似C或pascal等命令/指令編程語言,二者效力與結果相同, 比較靈活.
UFCS
  1. 要求方法(proc)或函數(func)的第一個參數是要操做的類型.python

    proc len2(value:string):int =
        處理過程省略
    let a = 「」 #a的類型自動推導. 等同於 let a:string = ""
    len2(a) == a.len2 #nim能夠不寫函數調用的括號
  2. 類的方法(proc/func/method)要求第一個參數是類的類型.
  • pythonc++

    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
  1. import osjson

    os.exists(「./testfile」)
  2. from os import *編程語言

    導入該模塊下的全部內容
    exists(「.testfile」) # 這裏使用os模塊內的函數[exists]不須要加上模塊名前綴
  3. import json as jn #將模塊引入後起個別名使用
  4. from os import path
  5. from os import path as syspath
  • nim
  1. from os import nil #等同於python的[import os].這裏不導入模塊內的內容,而只是將模塊自己導入.函數

    os.existsFile(「./testfile」)

    若是不加上[import nil]那麼默認是導入該模塊下的全部內容,而不須要在調用以前加上模塊名spa

  2. import oscode

    import os # 這裏導入os模塊
    existsFile(「.testfile」) # 這裏直接使用os模塊內的函數[existsFile].
    等同於python的[from os import *]
  3. import parseutils as pu import nil #將模塊引入後起個別名使用
  4. from os import existsFile
  5. from os import existsFile as exfile
相關文章
相關標籤/搜索