怎么自己实现 if?

2019-01-12 18:49:59 +08:00
 c3yangliu
不用 if 关键字,达到 if 的效果
3426 次点击
所在节点    Python
14 条回复
aijam
2019-01-12 19:35:39 +08:00
这是你想要的吗?
>>> def _if(predict, b1, b2):
... predict and b1()
... predict or b2()
...
>>> _if(True, lambda: print(1), lambda: print(2))
1
>>> _if(False, lambda: print(1), lambda: print(2))
2

还是想玩 lambda calculus ?
>>> _True = lambda x, y: x
>>> _False = lambda x, y: y
>>> def _if(predict, b1, b2):
... predict(b1, b2)()
...
>>> _if(_True, lambda: print(1), lambda: print(2))
1
>>> _if(_False, lambda: print(1), lambda: print(2))
2
laziji
2019-01-12 19:36:27 +08:00
js 中应该可以用 map 实现
```
let m = {
true:function(){},
false:function(){}
}

m[a || b]()

```
aijam
2019-01-12 19:42:50 +08:00
@laziji 诶,这也是一种办法
>>> def _if(predict, b1, b2):
... d = {True: b1, False: b2}
... return d[predict]()
...
>>> _if(True, lambda: print(1), lambda: print(2))
1
>>> _if(False, lambda: print(1), lambda: print(2))
2
zhustec
2019-01-12 19:44:21 +08:00
@aijam 用 python 玩 lambda 演算怕不是玩自己
aijam
2019-01-12 20:01:30 +08:00
@zhustec 不用 python 也是玩自己呀。
iwtbauh
2019-01-12 20:31:48 +08:00
修改 cpython,自己创建一个关键字等同于 if 的效果就行了。
FrankHB
2019-01-12 20:45:29 +08:00
嫌 Church boolean 不够 dt 的,参考 http://www.madore.org/~david/programs/unlambda/#howto_bool。
Wicked
2019-01-12 20:48:49 +08:00
英特尔 CPU 手册里面有跳转指令
yucao
2019-01-12 20:59:34 +08:00
对于最底层来说分支指令也是最基本的三步:比较,置位,beq
直接艹汇编呗 233
junjieyuanxiling
2019-01-12 21:00:02 +08:00
用 while else ?
Mutoo
2019-01-12 21:04:13 +08:00
要知道汇编语言是没有 if 语句的,在汇编里只有寄存器跳转指令 jz 或 jnz。
所以本质上你需要 goto 语句来做这件事。但有趣的是 python 也没有 goto 语句。
不过如果你深挖的话,可以发现 try except 可以用来做流控制。所以可以这样玩:
https://gist.github.com/mutoo/b84af24688377d857f4aaede8bfefa6c
c3yangliu
2019-01-12 21:09:29 +08:00
问这个主要还是想怎么用程序自己控制控制流,最近一直在想怎么在 python 里实现 call/cc
Mutoo
2019-01-12 21:18:52 +08:00
@c3yangliu 不太了解 call/cc,不过查了一圈我感觉你要的应该是 generator 和 yield 吧
watchjulia
2019-01-12 21:47:07 +08:00
函数指针可以实现

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/526403

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX