V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  abersheeran  ›  全部回复第 67 页 / 共 84 页
回复总数  1669
1 ... 63  64  65  66  67  68  69  70  71  72 ... 84  
2021-01-12 16:35:30 +08:00
回复了 abersheeran 创建的主题 Python 六行代码实现 Python 管道
@xuboying https://github.com/abersheeran/only-pipe/discussions 方便的话可以发到这,留作记录。

😀你这个也不错。可以再加一个 Reduce 的,就齐活了哈哈哈。
2021-01-12 15:36:34 +08:00
回复了 abersheeran 创建的主题 Python 六行代码实现 Python 管道
@no1xsyzy 但是能和他对着干的,也就那么几个大佬吧。红姐提交模式匹配的 PR 不还是 Guido 直接 Closed 嘛。
2021-01-12 15:06:55 +08:00
回复了 abersheeran 创建的主题 Python 六行代码实现 Python 管道
@no1xsyzy 提这个 PEP,Guido 会回复:I don't like it. Closed. 哈哈哈
2021-01-12 13:34:53 +08:00
回复了 abersheeran 创建的主题 Python 六行代码实现 Python 管道
2021-01-12 12:19:11 +08:00
回复了 zsf520zsf 创建的主题 程序员 小型互联网和外企汇丰外包项目怎么选?
@bleepbloop 赞同。去你妈的互联网行业。传统行业 IT,可能没那么炫酷,但是不用加班,工资也不低,福利也不少。
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
1 ... 63  64  65  66  67  68  69  70  71  72 ... 84  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5095 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 34ms · UTC 01:34 · PVG 09:34 · LAX 18:34 · JFK 21:34
Developed with CodeLauncher
♥ Do have faith in what you're doing.