[原创][连载]nim与python的异同3

变量(常量)绑定

  • python
    无特定关键字,直接设值
    a = r”^s*(d{4}-d{2}-d{2})s{1,2}(.+)$” # 将一个文字列放到名为a的变量里
    a = 8086 # OK,a的类型由文字列(上面定义的正则表达式)变成了整数(8086)
    这里就带来一个在大工程里很容易带来困扰的问题,理解代码不得不受制于类型极易变的变量,要理解代码所必需的工作量极大.
  • nim

    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
      常量前缀.

      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相同

        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:

        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有些异曲同工.在需要不可变数组(既不需要增删改元素)的地方,极其方便地临时存一些值.

      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
    -起始

    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的内容

你可能感兴趣的:(python,nim)