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