2010-08-11 89 views
2

我知道有条件地声明变量是不好的约定/设计。即:有条件地设置和有条件地使用变量python

if some_boolean: 
    x = 1 

其中x未在其他地方声明。但是如果只在满足条件时才使用它,那么是否有条件地声明变量是不好的?

if some_boolean and some_other_boolean: 
    x+=1 
+2

我不认为这是'坏'的。我认为这可能是一个迹象,表明你应该将课程或功能分解为更小的组件,但有时候,这是不可行的。你有没有特别的情况? – aaronasterling 2010-08-11 00:37:32

+0

这只是我的脚本允许用户指定选项。这取决于选项,我的脚本在脚本的开头和结尾都做了不同的事情。 – 2010-08-11 00:39:51

+0

我绝对同意它指向代码中的错误模块化。您是否熟悉[SRP](http://en.wikipedia.org/wiki/Single_responsibility_principle)?发布代码样本可能会帮助我们指出如何重构代码。 – Daenyth 2010-08-11 02:26:26

回答

2

这是可疑的风格,因为它很容易基于对未来维护者的不完美,公正的理解而出现错误。我也认为最初将变量设置为None(除非已知更多有用的值)有助于提高可读性,部分原因是它为您提供了一个自然的地方来记录所有带有注释的变量(而不是遍布所有这些注释这个地方,这使他们很难找到;-)。

1

,如果你的代码看起来象

if some_boolean: 
    x = 1 
# some actions 
# not changing some_boolean 
# but calculating some_other_boolean 
# ... 
if some_boolean and some_other_boolean: 
    x+=1 

是否可以重构为

def some_actions(some_args,...): 
#... 
def calculate_some_other_boolean(some_other_args,...): 
#... 
if some_boolean: 
    x = 1 
    some_actions(some_args,...) 
    if calculate_some_other_boolean(some_other_args,...): 
     x+=1 
else: 
    some_actions(some_args,...) 

0

从一个非常简单的设计角度来看,我只是默认布尔值为false,即使它可能稍后不会使用。那样的话,布尔值不是也许是定义的,或者也许是实际上是一个布尔值,并且如果它使用,它具有适当的值。

如果您有两个或三个布尔值设置为false,并且它们永远不会被使用,但它不会在大局意义上产生任何显着差异。但是,如果你有不止一个,它可能表明设计问题。