我有一个函数,检查3个不同的布尔标志,并有一个唯一的结果,每8个组合。在
"""
a | b | c | out
- + - + - + ---
0 | 0 | 0 | 0
0 | 0 | 1 | 1
0 | 1 | 0 | 2
0 | 1 | 1 | 3
1 | 0 | 0 | 4
1 | 0 | 1 | 5
1 | 1 | 0 | 6
1 | 1 | 1 | 7
"""
def do_stuff(a, b, c):
if a:
if b:
if c:
return function7() # a, b, c
return function6() # a, b, !c
if c:
return function5() # a, !b, c
return function4() # a, !b, !c
else:
if b:
if c:
return function3() # !a, b, c
return function2() # !a, b, !c
if c:
return function1() # !a, !b, c
return function0() # !a, !b, !c
自从我返回(退出循环)以来,我已经缩短了很多else
语句。在
有没有更干巴巴的方法来完成这一点?我可以转换成二进制,并执行if/elif的单个深度级别,但我不想使用“幻数”。在
另外,我意识到这只是8个结果的16行代码,但是如果是4个变量,有没有办法提高可读性/流?在
您需要有某种从结果到函数的映射,以及从输入到结果的映射。您在顶部提供的漂亮的表,再加上Python中的}这一事实为您提供了以下信息:
bool
只是整数0
和{如果您对具有任意数量的布尔输入感兴趣,可以修改}以使用varargs:
^{pr2}$do_stuff
和{首先,你可以建立一个二进制到十进制转换器。之后获取新的数字,您可以通过函数名在字符串中按eval函数调用方法:
请记住,您可以将全局变量传递给eval函数,除非使用当前的全局名称id。在
这里有两个解决方案。它们是否比你展示的漂亮,这取决于你自己。在
相关问题 更多 >
编程相关推荐