前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python的接班者之coconut

python的接班者之coconut

原创
作者头像
mariolu
修改2020-07-19 20:30:07
1.2K0
修改2020-07-19 20:30:07
举报
文章被收录于专栏:CDN及云技术分享

一、什么是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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、什么是coconut
  • 二、开始前的准备
    • 2.1 安装coconut
    • 三、coco语法
      • 3.1 管道(|>):
        • 3.2 括号作为lambda表达式,
          • 3.3 $
            • 3.4 addpattern
              • 3.5 函数不用冒号用问号=
                • 3.6 where: 赋值语句写在后面
                  • 3.7match ... in ...表达式
                    • 3.8 reiterable
                      • 3.9 其他
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档