Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据参数执行操作_Python_Python 3.x_Regex_String_Grammar - Fatal编程技术网

Python 根据参数执行操作

Python 根据参数执行操作,python,python-3.x,regex,string,grammar,Python,Python 3.x,Regex,String,Grammar,我正在尝试自动解决问题。 实际上,我的想法是使用以下格式解析输入:服务器名称|警报,并根据服务器名称和警报是什么,执行一个操作(=函数)。 我的第一个想法是用if/elif块代码来解决这个问题,但在我看来,开始编写它似乎效率低下且耗时较长 if server_name == 'Z': if alert == 'a': action1() elif alert == 'b': action2() ... elif server_nam

我正在尝试自动解决问题。 实际上,我的想法是使用以下格式解析输入:服务器名称|警报,并根据服务器名称警报是什么,执行一个操作(=函数)。 我的第一个想法是用if/elif块代码来解决这个问题,但在我看来,开始编写它似乎效率低下且耗时较长

if server_name == 'Z':
    if alert == 'a':
        action1()
    elif alert == 'b':
        action2()
        ...
elif server_name == 'Y':
    if alert == 'a':
        action3()
    elif alert == 'b':
        action4()
        ...
...
我做了研究,创建一个语法似乎是一个更好的解决方案,可能与re模块,ast模块或dis模块。但我看到的语法总是包括数学,我只需要计算字符串。
有人知道什么最适合这种情况吗?或者你知道有没有更好的解决方案?谢谢。

类似这样的东西,以元组为键:

actions = {('Z', 'a'):action1,
           ('Z', 'b'):action2,
           ('Y', 'a'):action3,
           ('Y', 'b'):action4}
server = 'Y'
alert = 'a'
actions[(server, alert)]() # execute it
你可以喜欢命名元组,等等

嵌套dict

actions = {'Z':{'a':action1,
                'b':action2},
           'Y':{'a':action3,
                'b':action4}}
server = 'Y'
alert = 'a'
actions[server][alert]() # execute it
在这两种情况下,我假设您也定义了操作的函数


注意,在3.10中(现在在dev中),我们将得到。

制作一个字典,而不是嵌套的if/elif/else块方法,比如:dict={“server_name1”:“alert1”,“server_name2”:“alert2”…},并创建一个if/elif代码块来计算执行操作的key:value?感谢您的回复!我可能会这样做,但你不认为用ast模块完成语法是一个更好的解决方案吗?不,这是一个惯用的方法,至少现在是这样,直到我们发布3.10时