博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[原创][连载]nim与python的异同1
阅读量:7080 次
发布时间:2019-06-28

本文共 2056 字,大约阅读时间需要 6 分钟。

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:
  1. print “hello, %s!”%(“ world”) #python2
    print(“hello, %s!”%(“ world”)) #python3
    print(“hello, {}!”.format(“ world”)) #python3
  2. print("hello, {0}! your name is {1}.".format(" world","rock")) #python3
  • nim也有类似用法:
  1. echo(“hello, $1!” % “ world”)
    或者不加括号也可以
    echo “hello, $1!” % “ world”
  2. echo "Hello, $2! your name is $1." % ["rock","world"] #输出顺序变化了
nim里文字串的操作符%不是默认操作符,需要在使用前引入strutils包.否则不能使用,在编译时会报错.
import strutils
这样就会给为文字串增加很多功能, 比如上面的%操作符

方法调用:

  • python是传统的[对象.方法]调用写法
  • nim 既可以用传统OOP风格的[对象.方法],也可以用[方法(对象)/方法 对象]调用,这被称为UFCS(Uniform Function Call Syntax-通用方法调用语法).后一种风格类似C或pascal等命令/指令编程语言,两者效力与结果相同, 比较灵活.
UFCS
  1. 要求方法(proc)或函数(func)的第一个参数是要操作的类型.

    proc len2(value:string):int =    处理过程省略let a = “” #a的类型自动推导. 等同于 let a:string = ""len2(a) == a.len2 #nim可以不写函数调用的括号
  2. 类的方法(proc/func/method)要求第一个参数是类的类型.
  • python

    class Person:    def makelove(self, spouse)→Person: # python3写法        省略person = Person()baby = person.makelove(spouse)
  • nim

    type    Person = objectproc makelove(self:Person, spouse:Spouse):Person =    省略person = Person()baby = person.makelove(spouse)#或者baby = makelove(person)

模块导入

  • python
  1. import os

    os.exists(“./testfile”)
  2. from os import *

    导入该模块下的所有内容
    exists(“.testfile”) # 这里使用os模块内的函数[exists]不需要加上模块名前缀
  3. import json as jn #将模块引入后起个别名使用
  4. from os import path
  5. from os import path as syspath
  • nim
  1. from os import nil #等同于python的[import os].这里不导入模块内的内容,而只是将模块本身导入.

    os.existsFile(“./testfile”)

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

  2. import os

    import os # 这里导入os模块
    existsFile(“.testfile”) # 这里直接使用os模块内的函数[existsFile].
    等同于python的[from os import *]
  3. import parseutils as pu import nil #将模块引入后起个别名使用
  4. from os import existsFile
  5. from os import existsFile as exfile

转载地址:http://njvml.baihongyu.com/

你可能感兴趣的文章
LinkedIn庄振运:从国家部委公务员到硅谷系统性能专家,创新是唯一主旋律
查看>>
Vue性能优化:如何实现延迟加载和代码拆分?
查看>>
小米大数据:借助Apache Kylin打造高效、易用的一站式OLAP解决方案
查看>>
2019年Java和JVM生态系统预测:OpenJDK将成为Java运行时市场领导者
查看>>
Peter Cnudde谈雅虎如何使用Hadoop、深度学习和大数据平台
查看>>
Spark Streaming 作者,Alluxio 的创始人李浩源:AI 潮流对做数据存储业务公司的挑战...
查看>>
阿里宣布开源Flutter应用框架Fish Redux!
查看>>
与Andrey Breslav谈论Kotlin 1.0的发布
查看>>
多链跨链、高可用、高安全性的区块链应用如何落地? 金链盟大赛10强揭晓
查看>>
京东购物在微信等场景下的算法应用实践
查看>>
取代ZooKeeper!高并发下的分布式一致性开源组件StateSynchronizer
查看>>
Node.js 10.0和NPM 6发布,强化安全性
查看>>
关于Neo4j 强连通分量算法,你了解多少?
查看>>
Fake 5提供.NET Core支持
查看>>
Mozilla开发全新的公开网络API WebXR 来实现增强现实
查看>>
Visual Studio 2017 15.9预览版3支持ARM64 for UWP
查看>>
LLVM3.8停止了旧Windows版本,取消Autoconf,改进Clang
查看>>
HTTP将死?又拍云布局HTTPS 护航网页安全加速
查看>>
Microsoft 365及应用开发的未来:微软BUILD 2018大会第二天主题演讲
查看>>
白话中台战略:中台是个什么鬼?
查看>>