资讯专栏INFORMATION COLUMN

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

GraphQuery / 1723人阅读

摘要:变量常量绑定无特定关键字直接设值将一个文字列放到名为的变量里的类型由文字列上面定义的正则表达式变成了整数这里就带来一个在大工程里很容易带来困扰的问题理解代码不得不受制于类型极易变的变量要理解代码所必需的工作量极大可变变量前缀将变量与

变量(常量)绑定

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

nim

var
可变变量前缀.
var a = re”^s*(d{4}-d{2}-d{2})s{1,2}(.+)$” # 将变量a与文字列绑定
其后a的内容可变
a = “change the value” #这里OK

let
不可变变量前缀.(一旦绑定,不得变更)
let b = re”^s*(d{4}-d{2}-d{2})s{1,2}(.+)$” # 将不可变变量b与文字列绑定
其后改变b
b = “change the value” #这里出错

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44804.html

相关文章

  • [原创][连载]nimpython异同1

    摘要:与的异同名词方法与函数同义仅仅是语言规定差异在本文中不做区别都是指定义的处理过程的有返回值没有返回值版之后出现的方法专指类中的函数的方法指无返回值的处理函数指有返回值的处理中的方法指无返回值的处理函数指有返回值的处理主模块的判断空代码为保 nim与python的异同 名词:方法与函数同义.仅仅是语言规定差异.在本文中不做区别. 1. python都是指def定义的处理过程 2. nim...

    wuaiqiu 评论0 收藏0
  • [原创][连载]nimpython异同2

    摘要:方法重载不支持支持和类似基本类型转换整数文字列使用整数内置方法由引入使用进行格式化由引入操作符可选格式文字列没有格式文字列共位小数位位右对齐进行格式化 overload(方法重载) python 不支持 nim 支持.和c++类似 基本类型转换 整数 → 文字列 使用整数(int/int8/int16/int32/64/uint/uint8/uint16/uint32/...

    yibinnn 评论0 收藏0
  • [原创]nimrust特点比较

    摘要:与的特点比较这两个目前都是小众语言做了些时间的研究写了点东西有了点心得相似点有卫生宏区别与的不卫生宏在类或定义体之外定义函数代码没有分成头与实现体例如的头与实现的与定义的接口定义与实现定义是分开的而与是不分开的运用函数式编程高阶函数目前是新 nim与rust的特点比较 这两个目前都是小众语言,做了些时间的研究,写了点东西有了点心得 相似点: 有卫生宏.区别与C++的(不卫生)宏 在类...

    DevTalking 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<