在if语句中分配变量并且如果调用if语句的那部分而不使用每个变量,这是不好的做法吗?
例如,在以下代码中,我有两个代码选项。选项1如果触发器=='1'或者如果触发器=='2'则变量y将被使用,因为仅当触发器=='4'或触发器=='5'时才需要它。选项2更长,但修复此问题。
# option 1
if trigger == '1' or trigger == '4':
x = int(start)
y = int(s1)
elif trigger == '2'or trigger == '5':
x = int(s1)
y = int(s2)
elif trigger == '3':
x = int(s2)
# option 2
if trigger == '1' or trigger == '4':
x = int(start)
elif trigger == '2'or trigger == '5':
x = int(s1)
elif trigger == '3':
x = int(s2)
if trigger == '4':
y = int(s1)
elif trigger == '5':
y = int(s2)
我的问题是哪一个是正确的,我应该使用哪一个?
感谢。
更新 -
如果调用if函数的一部分(在本例中),那么设置一个变量并不使用它是可以的吗?这是不错的做法或导致记忆问题等。 感谢。
答案 0 :(得分:2)
如果你真的想要只在使用时定义它们,那么为什么不将它们完全明确地显示出来并且显而易见?
if trigger == '1':
x = int(start)
elif trigger == '2':
x = int(s1)
elif trigger == '3':
x = int(s2)
elif trigger == '4':
x = int(start)
y = int(s1)
elif trigger == '5':
x = int(s1)
y = int(s2)
答案 1 :(得分:1)
为什么在if。
中不再有一个条件这是写option 2
的更好方法。我认为你可以遵循: -
if trigger in ('1', '4'): // You can better use `in` to check for more values
x = int(start)
if trigger == '4':
y = int(s1)
elif trigger in ('2', '5'):
x = int(s1)
if trigger == '5':
y = int(s2)
elif trigger == '3':
x = int(s2)
答案 2 :(得分:1)
与KV diagram中的优化类似,其中X
ed字段被视为或不依赖于它是否在优化中有用(参见带有BCD值的7段显示,其中值为10 .. 15是未定义的),我倾向于保持尽可能简单并指定值,即使它们以后不再使用。
答案 3 :(得分:0)
如果所有s1
,s2
等始终存在并且是有效整数,那么选项1就可以了。
但是,它确实会使您的代码不必要地依赖于您不使用的值的格式。有时那很好。但是,例如, s1
和朋友来自在命令行上传递或输入到输入文件中的选项,您的用户不希望您抛出ValueError
以保留这些值未定义,从而强制他们在参数中传递无意义的整数他们没有用。
所以,答案是这一切都取决于具体情况!很难对这类问题给出一般答案。