定义特定于条件的变量是一种好习惯

时间:2017-05-04 09:09:42

标签: python algorithm variables conditional-statements naming-conventions

说我有这样的程序(python但它是算法问题):

if boolean == true:
    commonvar = process1()
    var = "foo"
else:
    commonvar = process2()
    var = "bar"
result = intermediate_process (commonvar)
if boolean == true:
     print ("training of {} :{}".format (var, result)
else :
     print ("testing of {} :{}".format (var, result)

在#:p /中修改var是正确/好的设计实践吗?

if boolean == true:
    commonvar = process1()
    var_true = "foo"
else:
    commonvar = process2()
    var_false = "bar"
result = intermediate_process (commonvar)
if boolean == true:
     print ("training of {} :{}".format (var_true, result)
else :
     print ("testing of {} :{}".format (var_false, result)

我认为这样做的一个优点是你可以很容易地看到算法中的哪个“路径”属于var,而新的变量名称可能更相关(特别是在原始时为预先存在的算法添加条件时)变量名称“var”可能与算法中的原始路径有意义且相关,并且可能与新算法中的路径相同,但对于辅助添加路径可能没有意义/相关。
在错误的一端,我会说它可能更容易创建错误,因为如果您引用一个尚未定义的名称,编译器或程序在执行期间将抛出异常。
也就是说,这也可以被视为一种优势,因为更容易将路径与变量匹配。

你怎么看?确实,命名约定通常被定义为与良好的设计一起使用,但我认为问题比这更大,所以它不是特别基于python(我只是使用它,因为它对于理解编程/英语的人来说几乎是可读的)。

2 个答案:

答案 0 :(得分:1)

我认为第一个例子是更好地定义变量的方法。它更容易调试,并且由于它是由if / else子句设置的,因此将它作为一个公共变量更有意义。

您声明的变量数越多,所需的空间就越多,因为这个特殊问题可以通过一个变量处理,第一个设计成功。关于由于没有定义它而陷入错误的部分[这是错误的代码原则]将变量初始化为适合您的算法的值,如果它与foo或bar不匹配则在后续代码中捕获该变量否则你的代码就好了。

答案 1 :(得分:1)

怎么样:

print(f"training of foo :{intermediate_process(process1())}" if boolean else
      f"testing of bar :{intermediate_process(process2())}")

我认为这更清晰,并且不需要您记住代码中先前定义的奇数变量。我理解在更高级的情况下,你不一定能将它简化为如此简单的单行,但没有具体的例子,很难讨论什么是“最佳实践”。我无法想到一个在我头顶的地方,它不是立即明显地命名占位符(例如中间总和)或通过添加太多变量实际上丢失清晰度。