我有一种情况,我有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语句
谢谢
到目前为止,最简单的解决办法是使用字典。简单地定义如下:
然后,当您发现需要将字符串值转换为变量时,请执行以下操作:
这将
eax
,在本例中,从"var1"
更改为实际变量本身var1
。如果您愿意,您甚至可以通过这种方式在字典中存储函数。您可以简单地用以下方式称呼他们:您可以使用
vars()
variable_list = [v for v in [eax, ebx, ecx, edx] if v is not str else vars()[v]]
或
这只是一个更“黑”的版本,@Henry Woody的答案更具可读性,同时更清晰。为了更像Python,我会推荐他的
您可以尝试一次考虑单个变量的更新过程,并创建一个函数来处理该过程。这样,逻辑就可以很容易地为每个变量重用。这意味着您将拥有一个处理4(或5)个案例并调用4次(导致8-9个步骤)的函数,而不必进行每个组合(16个步骤)。这还有一个好处,就是使代码更具可读性和可维护性
例如:
请注意,这基本上是一个switch语句(Python不支持该语句),可以用以下方式编写(根据代码的其他部分,更新起来可能更容易):
这里请注意,
dict
类型的get
方法的工作原理与通常的方括号表示法(vars_lookup[x]
)类似,但处理在字典中找不到键的情况,然后返回默认值(第二个参数)相关问题 更多 >
编程相关推荐