让我用一些代码更好地解释一下。
class Opcode (Enum):
WEEK= 1
EMAIL= 2
NAME= 3
DOB= 4
然后我有一个参数类,它处理服务器接收的数据,并将其存储在适当的变量中:
class parameters:
week = None
email = None
name = None
dob = None
def __init__(self, conn):
#some initialization stuff, irrelevant
def process_input(self, opcode, data):
if opcode == Opcode.WEEK.value:
self.week = data
elif opcode == Opcode.EMAIL.value:
self.email= data
elif opcode == Opcode.NAME.value:
self.name= data
elif opcode == Opcode.DOB.value:
self.dob= data
.
.
.
else :
print("unknown opcode provided. disconnecting ... ")
#disconnect from client ...
如果只有4个操作码,这看起来并不太糟糕,但实际上我的程序有12个操作码,所以这个长如果。。。埃利夫。。。埃利夫。。。else
分支似乎是处理输入的一种糟糕方式。我习惯于使用C语言,在这种情况下,我会使用一个switch case,但它们在python中似乎不是什么东西,所以也许有一个更好的解决方案我只是不知道。有什么建议吗?
正如我在一篇评论中所建议的,使用字典可以避免出现一系列if
/elif
语句。它也将比执行它们更快(对于大量操作码),并且可以以一种使其主要由数据驱动的方式实现,因此非常容易扩展-只需向枚举添加更多值即可。
import enum
class Opcode(enum.IntEnum):
WEEK = 1
EMAIL = 2
NAME = 3
DOB = 4
# Create a dictionary mapping Opcode values to lowercase attribute names.
opcode_dict = {opcode.value: opcode.name.lower() for opcode in Opcode}
print(opcode_dict)
class Parameters:
def __init__(self, conn):
#some initialization stuff, irrelevant
...
def process_input(self, opcode, data):
try:
setattr(self, opcode_dict[opcode], data)
except KeyError:
print("unknown opcode provided. disconnecting...")
# Disconnect from client...
def __repr__(self):
pairs = ', '.join('{}={!r}'.format(attrname, getattr(self, attrname, None))
for attrname in opcode_dict.values())
return '{}({})'.format(type(self).__name__, pairs)
if __name__ == '__main__':
import random
params = Parameters(None)
for opcode in Opcode:
params.process_input(opcode, random.randint(1, 10))
print(params)
# Try a bogus opcode.
params.process_input(42, random.randint(1, 10))
我使用javap将一个java类文件反汇编成程序集。那么,我可以在没有操作系统的情况下运行javap命令生成的汇编代码吗?
我的代码是工作的,但是当我键入否,如果我想重试输入密码,它不工作;它只是进入输入密码行(第20行)。我尝试了多种方法来解决这个问题,但我就是做不到。
本文向大家介绍Python if, elif, else,包括了Python if, elif, else的使用技巧和注意事项,需要的朋友参考一下 示例 在Python中,您可以定义一系列条件if,第一个条件用于elif其余条件,直到最后一个(可选)else用于其他条件条件未捕获的任何条件。 产出 Number is bigger than 2 使用else if代替elif会触发语法错误,因此是
问题内容: 据我所知,没有主方法就无法执行,因为运行Java程序时。Java虚拟机将查找main方法。如果JVM无法找到main方法,它将显示运行时错误。线程main中的异常找不到main类。 但是我搜索了许多博客,其中一些人说,是的,如果Java程序中有静态块,则可以通过静态博客来完成,类加载器会在Java调用main()方法之前加载所有静态块! 真的有可能吗?它们的可用性如何? 问题答案: 现
我读到Redux Thunk是管理异步操作/请求的可靠方法。通过其他操作来调度操作没有什么太大的关系。 调度同步动作怎么样?我不确定thunk方法的性能问题,但我是否可以在其他操作创建者内部调度操作而不在内部定义函数? 在我看来,使用redux thunk对于这种需要是不必要的。
if/then/elif/else构造具有多个else分支。 语法 (Syntax) F#编程语言中if/then/elif/else语句的语法是 - if expr then expr elif expr then expr elif expr then expr ... else expr 例子 (Example) let a : int32 = 100 (* che