我想知道是否有人能告诉我pythonic的方法来检查以下内容。
我有一个6位二进制数,想要检查其十进制值。使用数学函数是一种方法,但是如果构造的话,我还需要写2 ** 6。
所以我想知道是否有一个更简单的陈述来写它。
还假设我们说它不是二进制的,那么在python中检查2 ** 6值的更好方法是什么。
if(a==1):
....
else:
if(a==2)
.....
一种方法是将它保存在列表中并使用索引进行检查但仍然需要很多if-else我猜......
谢谢....
答案 0 :(得分:4)
使用字典将值映射到结果(可以是Python中的函数)。
例如:
d = {}
d[0] = ....
d[1] = ....
d[2] = ....
outcome = d[a]
当然,这是如何工作取决于你的....
,但这种结构可以非常灵活。此方法最重要的特性是可以通过编程方式填充此字典,并且您无需编写大量手动分配。它当然也比使用嵌套的if
语句(或elsif
)
答案 1 :(得分:2)
要添加其他人的回复,您应该阅读PEP 8中推荐的Python样式。
使用if
版本时,方括号是不受欢迎的,并且需要间距:
if a == 1:
pass
elif a == 2:
pass
elif a == 3:
pass
else:
pass
答案 2 :(得分:0)
我会使用装饰器映射到基于字典的调度:
_dispatch_table = {}
def dispatch_on(*values):
def dec(f):
_dispatch_table.update((v, f) for v in values)
return f
return dec
@dispatch_on(0, 2, 47)
def one():
foo()
bar()
@dispatch_on(2, 23, 89)
def two():
bar()
baz()
x = some_number
_dispatch_table[x]()
答案 3 :(得分:-1)
如果我理解你的...
所以你的:
if(a==1):
....
else:
if(a==2)
.....
如果您使用if elif
阶梯:
if a==1:
....
elif a==2:
.....
else:
default
您还可以将Python的条件表达式用于简单梯子:
def one():
print("option 1 it is\n")
def two():
print("option 2 it is\n")
def three():
print("not one or two\n")
one() if a==1 else two() if a==2 else three()
甚至字典:
def one():
print("option 1 it is\n")
def two():
print("option 2 it is\n")
def three():
print("not one or two\n")
options = {1:one,
2:two,
3:three,
}
options[2]()
在this SO post中有关于switch形式的Python形式的讨论很多。
答案 4 :(得分:-3)
基于问题中有些模糊的信息以及我从OP的评论中收集到的信息,这是我的猜测:
def func1(): pass
def func2(): pass
def func3(): pass
# ...
def func62(): pass
def func63(): pass
if 0 < a < 64:
globals()['func'+str(a)]()
else:
print 'a is out of range'