[原创][连载]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的内容

兴趣广泛,专注代码,长期工作在*nix上,python/perl/vim作为文本工具.

10 声望
2 粉丝
0 条评论
推荐阅读
为什么Python使用者远远大于perl
python是预编译然后从pypi上下载 python(pip)将package下载到本地 然后解压后将package内容安装到不同的指定目录

德熀阅读 255

数据结构与算法:二分查找
一、常见数据结构简单数据结构(必须理解和掌握)有序数据结构:栈、队列、链表。有序数据结构省空间(储存空间小)无序数据结构:集合、字典、散列表,无序数据结构省时间(读取时间快)复杂数据结构树、 堆图二...

白鲸鱼9阅读 5.4k

滚蛋吧,正则表达式!
你是不是也有这样的操作,比如你需要使用「电子邮箱正则表达式」,首先想到的就是直接百度上搜索一个,然后采用 CV 大法神奇地接入到你的代码中?

良许3阅读 1.6k

搭个ChatGPT算法模型,从哪开始?
最近 ChatGPT 很火,火到了各行各业。记得去年更多的还是码农最新体验后拿它搜代码,现在各行各业都进来体验,问它咋理财、怎么写报告和给小孩起名。😂 也因此让小傅哥在头条的一篇关于 ChatGPT 的文章都有了26万...

小傅哥6阅读 1.4k

封面图
程序员适合创业吗?
大家好,我是良许。从去年 12 月开始,我已经在视频号、抖音等主流视频平台上连续更新视频到现在,并得到了不错的评价。每个视频都花了很多时间精力用心制作,欢迎大家关注哦~考虑到有些小伙伴没有看过我的视频,...

良许3阅读 1.3k

PyCharm 激活破解教程, 2023 年 2 月亲测有用
本文分享一下PyCharm 2022.2.3 版本最新激活破解教程,注意不要使用太新的版本,都是 Jetbrains 产品,本文专门配上了 Pycharm 的图片,跟着下面教程一步一步来即可。

程序员徐公阅读 11.1k评论 1

Ubuntu20.04 从源代码编译安装 python3.10
Ubuntu 22.04 Release DateUbuntu 22.04 Jammy Jellyfish is scheduled for release on April 21, 2022If you’re ready to use Ubuntu 22.04 Jammy Jellyfish, you can either upgrade your current Ubuntu syste...

ponponon1阅读 4.6k评论 1

兴趣广泛,专注代码,长期工作在*nix上,python/perl/vim作为文本工具.

10 声望
2 粉丝
宣传栏