
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 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 要知道汇编语言是没有 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 函数指针可以实现 |