V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  abersheeran  ›  全部回复第 71 页 / 共 88 页
回复总数  1744
1 ... 67  68  69  70  71  72  73  74  75  76 ... 88  
2021-01-12 11:37:40 +08:00
回复了 abersheeran 创建的主题 Python 六行代码实现 Python 管道
@xuboying 哈哈,如果你想要拆分成两个字符,不妨考虑 `|` 和 `^` 这两没有优先级问题。
2021-01-11 19:20:39 +08:00
回复了 abersheeran 创建的主题 Python 六行代码实现 Python 管道
@sapocaly 嗯,关于此的讨论你可以看看楼上我、 @frostming 和 @Wincer 发的。更好、更简单的实现方法目前来看,在 CPython 里是没有的。如果自己实现一个 Python 超集的编译器,那就可以做到了。

@iqxd @xuboying 因为我希望能传递多个参数给被 F 包裹的函数。一般来说,函数返回多值是 return x, y, z 这样,它的实际类型是一个 tuple 。

比如

def fa(...): return a, b, c
def fb(a, b, c, d, e): return y

就可以直接 data | F(fa) | F(fb), 而不是 data | F(fa) | F(lambda args: F(fb(*args))) 这样写。
2021-01-11 18:10:13 +08:00
回复了 abersheeran 创建的主题 Python 六行代码实现 Python 管道
@mckelvin 我文章里解释过了。管道的数据处理顺序跟阅读顺序是一样的。利于阅读代码。
你说的这个嵌套用法当然可以,可是阅读顺序和实际的执行顺序是相反的,它先执行的内部函数再执行的外部函数。
2021-01-11 18:03:21 +08:00
回复了 abersheeran 创建的主题 Python 六行代码实现 Python 管道
@NeezerGu 对的。

@admirez 可以,此管道可以用在任何 Python 代码里。我就是在处理数据的时候想到的这个。

@sapocaly 你说的这个不就是楼上推荐的那个库吗?你喜欢的话可以去试试,上面有链接。我个人喜欢 | F(...) 这么用。没有黑魔法,工作原理简单,对 debug 友好,最重要的优点是每一次管道运算都是真实的运算出了结果,我可以在任何一次运算之后拿去用,而不需要特意标识一个 END 或者其他什么的。
2021-01-11 11:53:13 +08:00
回复了 abersheeran 创建的主题 Python 六行代码实现 Python 管道
@frostming
@Wincer

就比如说明希想要的那个,可以用
def fp(func):
def _(*args, **kwargs):
return F(func, *args, **kwargs)
return _

折中实现一下,强制 double call 才能实际调用。

而你要做的这个,既要支持 direct call 又要支持
double call……那就得第一次调用之后延迟计算,判断如果是走管道,调第二次,判断直接赋值的话再去计算。CPython 应该做不到,可以考虑做个超集语言,在编译期做。
2021-01-11 11:44:28 +08:00
回复了 abersheeran 创建的主题 Python 六行代码实现 Python 管道
@Wincer 要实现你这个,首先要让这些 callable 支持自动柯里化……不是支持一个管道运算符就行了的

自动柯里化的工作量就太大了,因为 Py 里存在 *args 和 **kwargs 。我是想不到有什么好办法能实现的。所以我选择让程序员自己柯里化一次(也就是使用 F 包裹一次)。
2021-01-11 11:41:18 +08:00
回复了 abersheeran 创建的主题 Python 六行代码实现 Python 管道
@bruce00 谢谢~
2021-01-11 11:18:59 +08:00
回复了 abersheeran 创建的主题 Python 六行代码实现 Python 管道
@NeezerGu 自己看标准库源码吧。搜这一行 from _functools import partial
2021-01-11 10:17:22 +08:00
回复了 abersheeran 创建的主题 Python 六行代码实现 Python 管道
@Ritter 一般这种类似于一个函数功能的类,都会以小写命名,而不是死板的遵守 pep8 。
2021-01-11 10:13:38 +08:00
回复了 abersheeran 创建的主题 Python 六行代码实现 Python 管道
@zone10 partial 本身就是 C 写的,虽然在标准库里也有一个 C 模块不可用时的 Pure Python 降级代替,但编译正常的 CPython 都会用那个 C 版本。所以这里的性能损耗几乎不可能更低了。
2021-01-11 09:13:31 +08:00
回复了 abersheeran 创建的主题 Python 六行代码实现 Python 管道
@frostming 嗯? F 从 partial 继承而来,本就可以绑定参数的。😀
1 ... 67  68  69  70  71  72  73  74  75  76 ... 88  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   934 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 23ms · UTC 21:14 · PVG 05:14 · LAX 13:14 · JFK 16:14
Developed with CodeLauncher
♥ Do have faith in what you're doing.