if语句中的变量

时间:2012-10-11 09:31:58

标签: python

在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函数的一部分(在本例中),那么设置一个变量并不使用它是可以的吗?这是不错的做法或导致记忆问题等。 感谢。

4 个答案:

答案 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)

如果所有s1s2等始终存在并且是有效整数,那么选项1就可以了。

但是,它确实会使您的代码不必要地依赖于您不使用的值的格式。有时那很好。但是,例如, s1和朋友来自在命令行上传递或输入到输入文件中的选项,您的用户不希望您抛出ValueError以保留这些值未定义,从而强制他们在参数中传递无意义的整数他们没有用。

所以,答案是这一切都取决于具体情况!很难对这类问题给出一般答案。