资讯专栏INFORMATION COLUMN

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

wuaiqiu / 2612人阅读

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

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:

print “hello, %s!”%(“ world”) #python2
print(“hello, %s!”%(“ world”)) #python3
print(“hello, {}!”.format(“ world”)) #python3

print("hello, {0}! your name is {1}.".format(" world","rock")) #python3

nim也有类似用法:

echo(“hello, $1!” % “ world”)
或者不加括号也可以
echo “hello, $1!” % “ world”

echo "Hello, $2! your name is $1." % ["rock","world"] #输出顺序变化了

nim里文字串的操作符%不是默认操作符,需要在使用前引入strutils包.否则不能使用,在编译时会报错.
import strutils
这样就会给为文字串增加很多功能, 比如上面的%操作符
方法调用:

python是传统的[对象.方法]调用写法

nim 既可以用传统OOP风格的[对象.方法],也可以用[方法(对象)/方法 对象]调用,这被称为UFCS(Uniform Function Call Syntax-通用方法调用语法).后一种风格类似C或pascal等命令/指令编程语言,两者效力与结果相同, 比较灵活.

UFCS

要求方法(proc)或函数(func)的第一个参数是要操作的类型.

proc len2(value:string):int =
    处理过程省略
let a = “” #a的类型自动推导. 等同于 let a:string = ""
len2(a) == a.len2 #nim可以不写函数调用的括号

类的方法(proc/func/method)要求第一个参数是类的类型.

python

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

import os

os.exists(“./testfile”)

from os import *

导入该模块下的所有内容
exists(“.testfile”) # 这里使用os模块内的函数[exists]不需要加上模块名前缀

import json as jn #将模块引入后起个别名使用

from os import path

from os import path as syspath

nim

from os import nil #等同于python的[import os].这里不导入模块内的内容,而只是将模块本身导入.

os.existsFile(“./testfile”)

如果不加上[import nil]那么默认是导入该模块下的所有内容,而不需要在调用之前加上模块名

import os

import os # 这里导入os模块
existsFile(“.testfile”) # 这里直接使用os模块内的函数[existsFile].
等同于python的[from os import *]

import parseutils as pu import nil #将模块引入后起个别名使用

from os import existsFile

from os import existsFile as exfile

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

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

相关文章

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

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

    GraphQuery 评论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条评论

wuaiqiu

|高级讲师

TA的文章

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