一、什么是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一样直观
三、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
...表达式
精简代码用的,比如说
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