標籤:

Flowpython針對lambda的一個修正

之前where子句的作用其實很naive的。

就是把where里的語句給先執行了再執行前面的表達式。於是乎,連續的lambda表達起來不太好看的。

比如昨天的代碼需要這樣做:

t=.a,b,c -> .d,e,f -> .g,h,i -> tmp(a,b,c,d,e,f,g,h,i) where:n def tmp(a,b,c,d,e,f,g,h,i):n middle_value1 = a*e*i + b*f*g + c*d*hn middle_value2 = g*e*c + h*f*a + i*d*bn return middle_value1 - middle_value2 n

這個呢,感覺不太好看。

今天專門處理了一下where前表達式是lambda的情況,上面的代碼這麼寫就好了:

t=.a,b,c -> .d,e,f -> .g,h,i -> ret_value where:n middle_value1 = a*e*i + b*f*g + c*d*hn middle_value2 = g*e*c + h*f*a + i*d*bn ret_value = middle_value1 - middle_value2 n

就是這樣了。什麼意思呢? where的作用域限制在最後一個lambda的閉包內。

這樣就可以寫稍微優雅點的currying了。

最後說一下,為什麼我要兼容三種表達式呢?

1. as-with f1_args def as f2_args def as f3_args def <表達式>[where子句]n2. .f1_args->.f2_args->.f3_args-> <表達式> [where子句]n3. lambda f1_args: lambda f2_args: lambda f3_args : <表達式> [where子句] n

前兩者除了外形,功能一致,第三種是標準的,我真的覺得不好看(求不洗)。前兩者支持參數annotation, 比如

.x:int->x+1n

標準的lambda不支持這個,可讀性不好(2333

第一種lambda我的意思是Pythonic風格,自然語言,雖然似乎有點繞。。。但放到代碼高亮里,迷之能讓我想起一年前學Python的回憶...

第二種lambda呢,是一門正常語言應該有的。。

最後是關於獲得flowpython的方法,我這邊有linux下的built-in版本,windows的話等會我去虛擬機弄一個。如果你不想自己編譯的可以找我。

但是這個編譯真的超簡單啊。。我來跟你說。。

要是你有一個c++編譯器...

然後你先去官網下一個python3.6.2的source

Python Source Releases for Source release

然後到我的gayhub上把flowpython下下來解壓。

thautwarm/flowpython

在解壓目錄里建一個文件夾叫PythonDist,把CPython3.6.2解壓到裡面。

目錄結構這樣的。。

然後你要是裝有原生python的話就超級好辦了,在flowpython目錄打開shell/cmd,

然後輸入

./conf commit -v try_flowpyn

額,如果不行可能得

python config.py commit -v try_flowpyn

然後會生成一個temp_version 文件夾,裡面有一個try_flowpy的文件里,裡面就是當前flowpy版本的暫存...額,這句話你忘了吧,是給潛在的開發者說的...

總之這個時候再輸入一行命令

./conf make -m allnpython config.py make -m alln

啊,對了,你還得有一個make工具,這個很好裝的。。linux自帶,windows戳Index of /gnu/make/

嘛,然後編譯完,就可以在PythonDist目錄輸入

./pythonn

打開flowpython了

不會影響到你本地的python的。。

要是本地沒有python(但是估計看我這文章的應該大多數本地都有python吧?

還是要個make,先把CPython的對應文件替換flowpy文件夾下的,子路徑一致的。然後直接進/PythonDist目錄,

./configure CC=<your C/C++ compiler>nmake regen-gramamrnmake regen-astnmaken./pythonn

嗯... 順便在這裡說了一通怎麼編譯python...

以上...


推薦閱讀:

linux下pip模塊安裝路徑?
python下使用selenium怎麼才能控制瀏覽器載入某個元素?
python里函數作為返回值如何進行比較?
Python有哪些黑魔法?

TAG:Python | CC |