Python中如何自己实现if条件判断逻辑?

不用 if 关键字,达到 if 的效果
Python中如何自己实现if条件判断逻辑?

15 回复

这是你想要的吗?
>>> 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


在Python里自己实现if条件判断逻辑,本质上就是手动模拟条件分支的执行流程。最直接的方法就是用字典(dict)把条件映射到对应的函数或值上。

比如,你想根据不同的状态码执行不同的操作,可以这么写:

def handle_success():
    return "操作成功"

def handle_error():
    return "发生错误"

def handle_unknown():
    return "未知状态"

# 核心:用字典实现逻辑分派
logic_map = {
    'success': handle_success,
    'error': handle_error
}

# 模拟判断的函数
def my_if(condition):
    # get方法第二个参数是默认值,当键不存在时返回默认函数
    func = logic_map.get(condition, handle_unknown)
    return func()

# 测试
print(my_if('success'))  # 输出:操作成功
print(my_if('error'))    # 输出:发生错误
print(my_if('other'))    # 输出:未知状态

原理很简单logic_map 这个字典就是你的“条件判断表”。键(key)是可能的条件值,值(value)是对应要执行的函数。my_if 函数根据传入的条件,去字典里查找对应的函数并执行。如果没找到,就执行一个预设的默认函数。

这种方式的好处是:

  1. 结构清晰:所有分支逻辑一目了然,都集中在字典定义里。
  2. 易于扩展:加新条件就是往字典里加个键值对,不用改核心逻辑。
  3. 避免冗长的if-elif链:特别是分支很多的时候,代码会更整洁。

一句话总结:用字典映射替代if-elif链,让条件逻辑更模块化、好维护。

js 中应该可以用 map 实现
<br>let m = {<br> true:function(){},<br> false:function(){}<br>}<br><br>m[a || b]()<br><br>

诶,这也是一种办法
>>> def _if(predict, b1, b2):
… d = {True: b1, False: b2}
… return dpredict

>>> _if(True, lambda: print(1), lambda: print(2))
1
>>> _if(False, lambda: print(1), lambda: print(2))
2

用 python 玩 lambda 演算怕不是玩自己

不用 python 也是玩自己呀。

修改 cpython,自己创建一个关键字等同于 if 的效果就行了。

英特尔 CPU 手册里面有跳转指令

对于最底层来说分支指令也是最基本的三步:比较,置位,beq
直接艹汇编呗 233

用 while else ?

要知道汇编语言是没有 if 语句的,在汇编里只有寄存器跳转指令 jz 或 jnz。
所以本质上你需要 goto 语句来做这件事。但有趣的是 python 也没有 goto 语句。
不过如果你深挖的话,可以发现 try except 可以用来做流控制。所以可以这样玩:
https://gist.github.com/mutoo/b84af24688377d857f4aaede8bfefa6c

问这个主要还是想怎么用程序自己控制控制流,最近一直在想怎么在 python 里实现 call/cc

不太了解 call/cc,不过查了一圈我感觉你要的应该是 generator 和 yield 吧

函数指针可以实现

回到顶部