2012-10-11 371 views
0

在if语句中分配变量并在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函数(在这种情况下)被称为这一角色呢?这是不错的做法或导致内存问题等。 谢谢。

+3

对我来说很好。如果在('1','4')中触发:',我会这样做,但是,它更加pythonic。 –

+0

@JoelCornett:'如果'14''中的触发器做同样的事情并且需要更少的击键 – inspectorG4dget

+3

@ inspectorG4dget - 但是在触发==“14”'的情况下失败。 – detly

回答

0

如果所有s1,s2等将始终存在并且是有效整数,那么选项1是好的。

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

所以真的,答案是这一切都取决于上下文!这些问题很难给出一个普遍的答案。

+0

谢谢你的回答已经清除了使用它的理由。 –

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

如果你真的想仅在使用时让他们定义的,为什么不把它完全明确,明显的都读取和改变?

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) 
+0

嗯,我不一定需要它们才能被定义,如果使用。ATM我想减少我现有的代码,现在想知道是否有任何副作用,或者如果编程实践不好,定义一个变量而不是每次调用函数时都使用它们。我已经更新了原文,以反映这一点。 –

1

类似于在KV diagram的优化,其中X ED字段被认为是或不是取决于它是否在优化是有用的(与BCD值,其中所述值10..15未定义比照7段显示器) ,我会倾向于尽可能保持简单,并且即使它们稍后不被使用也会分配值。

+0

@ glglgl所以即使它们以后不被使用,也没有赋值的issus? –

+0

不,他们只是没有使用。 – glglgl