python的接班者之coconut

2020-07-19 20:30:07 浏览数 (1)

一、什么是coconut

coconut是一个在python基础上开发的组件,它完美支持python3的所有语法。并且扩展改善了一些新的语法。使用coconut可以转化出可运行的python程序,这个python程序可运行于python的任何版本,包括python2。

举个例子:

代码语言:javascript复制
coconut helloworld.coco ##会编译并生产同名文件hellowold.py

执行python helloworld.py等价于执行coco脚本

也可以使用

代码语言:javascript复制
coconut -r helloworld.coco

直接整合两个步骤一起执行

coconut -l编译调试的时候加上行号信息

coconut有个--strict模式,开启该模式,会进行严格的语法检查

二、开始前的准备

2.1 安装coconut

比较简便 的方法是使用pip安装

代码语言:javascript复制
pip install coconut

2.2 高亮coconut

这个vim插件可以高亮coco脚本。 https://github.com/manicmaniac/coconut.vim。

代码语言:javascript复制
curl https://raw.githubusercontent.com/Shougo/neobundle.vim/master/bin/install.sh > install.sh
vim  NeoBundleInstall  qall

3.3 coconut支持高亮显示

执行coconut,然后敲命令可以高亮,就像IDE一样直观

图1、像IDE一样高亮图1、像IDE一样高亮

三、coco语法

coco在解决一些软件开发问题上,建立了自己的特有语法。开始学习之旅啰

3.1 管道(|>):

coconut支持管道,函数间的数据传递:

代码语言:javascript复制
"hello world" |> print

这个类似于python语法中的print("hello world")

这样设计有什么好处呢?这样在多个函数进行数据传递,原生的python不支持

3.2 括号作为lambda表达式,

可以简化循环分支代码,并用函数式编程()

任何运算符号使用()包住相当于lambad函数,比如说(*)相当于lambda x,y:x*y。

3.3 $

美元符是懒加载的代名词,是有需要才去计算。

如果美元符用于函数前面,美元符号连接了左边和右边,是partial的两个参数

代码语言:javascript复制
>>> reduce$(*) 
functools.partial(<built-in function reduce>, <built-in function mul>)

$展开为functools.partial, reduce展开为<built-in function reduce>,(*) 展开为<built-in function mul>

那么这里reduce又是什么 ,reduce是个内置函数。

代码语言:javascript复制
>>> reduce 
<built-in function reduce>

reduce(...)

reduce(function, sequence[, initial]) -> value

reduce曾经在python2出现。reduce的函数定义为,输入两个参数:1个函数 迭代器

代码语言:javascript复制
reduce(function, iterable[, initializer])
代码语言:javascript复制
比如说下面reduce的例子:
>>>def add(x, y) :            # 两数相加
 ...     return x   y 
...  
>>> reduce(add, [1,2,3,4,5])# 计算列表和:1 2 3 4 5
15
 >>> reduce(lambda x, y: x y, [1,2,3,4,5])# 使用 lambda 匿名函数
15

或者看这个例子

代码语言:javascript复制
reduce(f, (a, b, c, d))

acc                 iter
                    (a, b, c, d)
a                   (b, c, d)
f(a, b)             (c, d)
f(f(a, b), c)       (d)
f(f(f(a, b), c), d)

return acc

3.4 addpattern

addpattern: 连接pattern-matching fuction。addpattern可以理解成为case match等条件控制语句做精简代码函数准备的

3.5 函数不用冒号用问号=

如果函数定义是=,而不是:,这里就不用写return语句,最后一句的执行的值就是返回值,比如说

def factorial(0) = 1

3.6 where: 赋值语句写在后面

3.7match ... in ...表达式

精简代码用的,比如说

代码语言:javascript复制
match pattern in item:
    <body>
else:
    <else>

是下面代码的精简

代码语言:javascript复制
case item:
    match pattern:
        <body>
else:
    <else>

3.8 reiterable

可以一直保持迭代的迭代器

3.9 其他

coconut还有其他关键字,比如:map, zip, filter, reversed, enumeratede等加强了pythonr的 的功能

  • map: func, iters
  • zip: iters
  • filter: func, iter
  • reversed: iter
  • enumerate: iter, start

0 人点赞