1
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 |
2
laziji 2019-01-12 19:36:27 +08:00 2
js 中应该可以用 map 实现
``` let m = { true:function(){}, false:function(){} } m[a || b]() ``` |
3
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 |
6
iwtbauh 2019-01-12 20:31:48 +08:00 via Android
修改 cpython,自己创建一个关键字等同于 if 的效果就行了。
|
7
FrankHB 2019-01-12 20:45:29 +08:00
嫌 Church boolean 不够 dt 的,参考 http://www.madore.org/~david/programs/unlambda/#howto_bool。
|
8
Wicked 2019-01-12 20:48:49 +08:00 via iPhone
英特尔 CPU 手册里面有跳转指令
|
9
yucao 2019-01-12 20:59:34 +08:00
对于最底层来说分支指令也是最基本的三步:比较,置位,beq
直接艹汇编呗 233 |
10
junjieyuanxiling 2019-01-12 21:00:02 +08:00 via Android
用 while else ?
|
11
Mutoo 2019-01-12 21:04:13 +08:00 2
要知道汇编语言是没有 if 语句的,在汇编里只有寄存器跳转指令 jz 或 jnz。
所以本质上你需要 goto 语句来做这件事。但有趣的是 python 也没有 goto 语句。 不过如果你深挖的话,可以发现 try except 可以用来做流控制。所以可以这样玩: https://gist.github.com/mutoo/b84af24688377d857f4aaede8bfefa6c |
12
c3yangliu OP 问这个主要还是想怎么用程序自己控制控制流,最近一直在想怎么在 python 里实现 call/cc
|
14
watchjulia 2019-01-12 21:47:07 +08:00
函数指针可以实现
|