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

變量(常量)綁定

  • python
    無特定關鍵字,直接設值
    a = r」^s*(d{4}-d{2}-d{2})s{1,2}(.+)$」 # 將一個文字列放到名爲a的變量裏
    a = 8086 # OK,a的類型由文字列(上面定義的正則表達式)變成了整數(8086)
    這裏就帶來一個在大工程裏很容易帶來困擾的問題,理解代碼不得不受制於類型極易變的變量,要理解代碼所必需的工做量極大.
  • nimjava

    1. var
      可變變量前綴.
      var a = re」^s*(d{4}-d{2}-d{2})s{1,2}(.+)$」 # 將變量a與文字列綁定
      其後a的內容可變
      a = 「change the value」 #這裏OK
    2. let
      不可變變量前綴.(一旦綁定,不得變動)
      let b = re」^s*(d{4}-d{2}-d{2})s{1,2}(.+)$」 # 將不可變變量b與文字列綁定
      其後改變b
      b = 「change the value」 #這裏出錯
    3. const
      常量前綴.python

      const
        HTTP_METHOD = r」HEAD」

經常使用數據結構

  • python正則表達式

    • list:可變長度數組.相似java的ArrayList.
    • tuple:不可變數組.
    • dictionary:相似java的HashMap.key-value數據結構
  • nim數組

    • seq:相似python list.長度可變,元素可刪除增長變動.
      使用方法:
      var e = newSeq[int]() #一個空序列(列表)
      let values = @[1,3,5,7] #快捷定義一個有4個整數元素的列表並初始化.徹底定義:let values: seq[int] = @[1,3,5,7]
    • tuple數據結構

      • 與python tuple相同less

        proc test():tuple[name:string, age:int8] =
            (「bill」,67)
        let (fname, fage) = test() # 此時,函數test返回的名稱與年齡分別賦給了fname, fage.fname類型推斷爲string, fage類型推斷爲int8.
      • 與python dictionary相同用法. 用key-value進行訪問
        示例1:函數

        var o = (name: "Banana", weight: 2, rating: 'c')
        o[1] = 7 # weight:2 → 7
        o.name = "Apple"
        o.rating = ‘g’

        示例2:code

        type
          Person = tuple[name: string, age: int]
        var
          person: Person
        
        person = (name: "Peter", age: 30)
        person = ("Peter", 30)# 可讀性略差,但結果同樣的寫法:
        echo person.name # "Peter"
        echo person.age  # 30
    • array
      雖然徹底不一樣,但用法卻與python的tuple有些殊途同歸.在須要不可變數組(既不須要增刪改元素)的地方,極其方便地臨時存一些值.string

      var 
        values = [「abc」,」def」,」ghijk」] #自動推斷類型爲array[3,string]
        values2: array[4,int] = [1,2,3,5] #4個下標的不可變數組,初始化時賦了4個值.
        values:array[0..5, int] = [2,3,5,8] #最長5個下標的不可變數組,初始化時賦了4個值.

片段

  • python
    -起始io

    a = "python is a progamming language"
    b = "Slices are useless."
    print(a[12:18]) # --> 'progam' #12:從開始處第12個下標;18:從開始處的下標

    -反向標記片段

    b = "Slices are useful."
    print(b[11:-1]) # → 'useful' . 11:從開始處第11個下標;-1:從結尾處向前減小下標(反向的意思),也就是[倒數1的下標]
    b[11:-2] = "useful" # 出錯, python不支持這樣賦值
  • nim
    -起始

    var
      a = "Nim is a progamming language"
    
    echo a[7..12] # --> 'a prog'

    -反向標記片段

    var
      b = "Slices are useless."
    
    b[11..^2] = "useful" #nim用^表示反向下標位置.^2表示倒數第二個下標
    echo b # --> 'Slices are useful.' # 改變變量b的內容
相關文章
相關標籤/搜索