如果在python中替换elif块

nak*_*iya 1 python conditional

事实证明,这个条件块在我的代码中不断重复.还有其他方法让我的生活更轻松吗?当然,对于一个条件要执行的身体是不同的.

if self.datatype == "string":
    t = "z"
elif self.datatype == "double":
    t = "d"
elif self.datatype == "number":
    t = "i"
elif self.datatype == "blob":
    t = "z"
else:
    raise EntParEx("Unknown datatype" + self.datatype)
Run Code Online (Sandbox Code Playgroud)

......更多代码使用相同的条件

def emit_cpp_def(self):
    s = ""
    e = ""
    if self.datatype == "string":
        s += "static const int " + self.lenvar + " = " + self.length + ";"
        s += "\nchar"
        e += "[" + self.lenvar + " + 2" + "]"
    elif self.datatype == "double":
        s += "double"
    elif self.datatype == "number":
        s += "int"
    elif self.datatype == "blob":
        s += "char*"
    else:
        raise EntParEx("Unknown datatype" + self.datatype)

    s += " " + self.cpp_membername;
    s += e
    s += ";"
    return s;

def emit_cursor_def_code(self):
    if self.datatype == "blob":
        return ""

    ret = "nvl(" + self.db_fieldname + ", "
    #TODO: Add default value loading!
    if self.datatype == "string":
        ret += "\' \'"
    elif self.datatype == "double":
        ret += "-1.0"
    elif self.datatype == "number":
        ret += "-1"
    else:
        raise EntParEx("Unknown datatype" + self.datatype)
    ret += "), "
    return ret
Run Code Online (Sandbox Code Playgroud)

编辑:我认为我需要的是为每种类型运行特定的功能.不幸的是,我不熟悉python.可以这样做吗?即

switch_datatype(function_string(), function_integer(), ...etc)
Run Code Online (Sandbox Code Playgroud)

这更糟吗?

Jos*_*Lee 15

如果它是完全相同的条件,请将其粘贴在方法中并在需要的地方调用它.否则,在某处定义字典并使用您需要的任何字典.

datatypes = {'string': 'z', 'double': 'd', 'number': 'i', 'blob': 'z'}
t = datatypes[self.datatype]
Run Code Online (Sandbox Code Playgroud)

您可能会捕获KeyError并引发域异常.