gpt4 book ai didi

python - 在 python 中缩小非常大的 If 语句

转载 作者:行者123 更新时间:2023-12-04 15:13:31 24 4
gpt4 key购买 nike

我有这样一种情况,我有 4 个名为 eax、ebx、ecx 和 edx 的变量,它们中的任何一个都可以设置为这些变量中的任何一个:var1、var、var3 和 var4,但是它们被设置为字符串“varx”而不是 varx 的值,但一次只需要修复其中一个。我一直在使用这个 if 语句:

  if eax=="var1":
eax=var1
elif ebx=="var1":
ebx=var1
elif ecx=="var1":
ecx=var1
elif edx=="var1":
edx=var1
elif eax=="var2":
eax=var2
elif ebx=="var2":
ebx=var2
elif ecx=="var2":
ecx=var2
elif edx=="var2":
edx=var2
elif eax=="var3":
eax=var3
elif ebx=="var3":
ebx=var3
elif ecx=="var3":
ecx=var3
elif edx=="var3":
edx=var3
elif eax=="var4":
eax=var4
elif ebx=="var4":
ebx=var4
elif ecx=="var4":
ecx=var4
elif edx=="var4":
edx=var4

但我知道这是非常糟糕的做法。有没有办法压缩这个 if 语句?

谢谢。

最佳答案

您可以尝试一次考虑单个变量的更新过程,并创建一个函数来处理它。然后可以很容易地为每个变量重用逻辑。这意味着您将拥有一个处理 4(或 5)个案例并调用它 4 次(产生 8-9 个步骤)的函数,而不必执行每个组合(16 个步骤)。这也有利于使您的代码更具可读性和可维护性。

例如:

def get_var(x):
if x == "var1":
return var1
if x == "var2":
return var2
if x == "var3":
return var3
if x == "var4":
return var4
return x

eax = get_var(eax)
ebx = get_var(ebx)
ecx = get_var(ecx)
edx = get_var(edx)

请注意,这基本上是一个 switch 语句(Python 不支持),可以改写为以下方式(根据您的其余代码,更新起来更容易):

vars_lookup = {
"var1": var1,
"var2": var2,
"var3": var3,
"var4": var4,
}

def get_var(x):
return vars_lookup.get(x, x)

eax = get_var(eax)
ebx = get_var(ebx)
ecx = get_var(ecx)
edx = get_var(edx)

请注意,dict 类型的get 方法的工作方式与通常的括号表示法 (vars_lookup[x]) 类似,但会处理大小写在字典中找不到键的地方,然后返回默认值(第二个参数)。

关于python - 在 python 中缩小非常大的 If 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64745657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com