2010-05-21 40 views
2

我在想,如果程序很小并且有很多方法,答案可能是“否”,但是在更大的程序中呢?如果我要在整个程序中以多种方法使用一个变量,是否更智能:Python:在方法之间传递变量时,是否需要为它分配一个新名称?

为每种方法提供不同的措辞(以消除命名冲突)。 使用相同的名称为每个方法(以消除混乱) 只需使用一个全局变量(以消除两者)

这是比什么都一个风格问题。你传递变量时使用什么命名约定?

+2

我不明白这个问题。你能举个例子吗? – 2010-05-21 22:42:58

回答

4

当在方法之间传递变量时......没有命名冲突,因为变量在每个方法中都是本地的,所以两种方法中的同一名称消除了混淆。

def printIt(num): 
    print(num) 

def f(): 
    num = 2 
    printIt(num) 
+0

可能很好修改printIt中的num,然后在print的调用之后也打印num。它表明f()中的num没有改变。 – Ponkadoodle 2010-05-21 22:45:41

+0

我认为请求者知道变量是方法内部的局部变量。他似乎要问,如果你在任何地方都用'num',这是可接受的还是不适用于大型节目,为什么不呢? – 2010-05-21 22:50:16

3

我倾向于重复使用局部函数中的变量名,只要它们是中间进程。对于数据库查找通常是“结果”,或者是中介使用的计算,并且需要生成或构造方法的最终结果。

我很少使用全局变量,事实上只有当我必须。

2

Python的范围规则几乎让您免于使用不同或相同的变量名称来满足语言需求。

变量名称的选择首先应该由可读性和可维护性问题来驱动。通常,在整个代码中只使用一个名称来标识特定类型的东西是很好的。这种一致性对读者有帮助。命名变量,方法和类是你必须使你的意图清楚的最大工具之一---对你自己和其他人。

关于命名事物有大量的(并非完全一致的)文献。一对夫妇的事情要考虑:

  1. 用小望远镜名称可以是短名称不一定告诉变量原委,因为该变量的整个背景下是很容易识别。作为循环中的计数器的i,j,k可能是经典的例子---但是在Python的集合循环结构中,它看起来并没有看到太多的东西。
  2. 另一方面是,具有较大范围的名称(可能是类中的实例变量)应该有更完全的描述性名称,因为它们显示在初始化/修改上下文不可见的地方。
  3. 尽量不要把'噪音'片段放入你的名字中。 frequencyInfo ---信息部分到底是什么东西?
  4. 不要在名称中包含数据结构类型--- urldict中的字典不会真正帮助您。
  5. 尽可能使用正在使用的域的名称,但不强制使用它。
  6. Python风格倾向于简洁的名字。仔细思考和选择通常会产生一个简短但易于使用的名称。
1

不要去发明指示名称属于哪个方法的方法。如果你编码正确,你将不会将其他方法变量视为本地变量。如果你对foobar方法有兴趣,并希望它的foo值使用foobar.foo。

变量名称应指示变量的内容并帮助理解代码。引用许多不同名称的foo,因为很多方法使用foos都无济于事。你的时间可能会更好地澄清,在这里foo这里不是foo。对于这些情况,您可能至少需要在一种情况下使用不同的术语。在您的代码中记录案例。

对变量使用相同的名称将有助于跟踪代码中使用关键对象的位置。你也会有很多通用变量让代码更容易理解:i,j和k表示interators;中间结果的结果;等等。

1

当它意味着同样的事情时,您应该使用相同的名称。例如,如果您有一个“汽车”数据库,则可能需要使用名称“汽车”来指代在接受汽车作为参数或与汽车对象在内部协作的每种方法或功能中的单个汽车。这样做,阅读代码的人会开始对自己说:“好的,这是一辆汽车”,而不是“嗯,我想知道'foo'是什么类型的......”。

所以,在使用变量名称时应保持一致,这意味着只要具有相同的含义,就可以多次使用相同的名称。如果可能的话,千万不要用同一个名字来表示两个不同的东西。例如,不要使用“item”来表示一个环境中的汽车,以及另一个环境中的列表中的随机项目。

1

有没有这样的要求给不同的方法或函数参数变量不同的名称。事实上,这会极大地损害可读性并违背常识 - 当两件事情是相同的时候,人们试图给他们一个相同的名字,而不是不同的名字。