(python)我的变量应该是本地的还是全局的? (最佳实践)

时间:2013-04-06 12:57:31

标签: python variables coding-style global-variables local-variables

当声明一个仅使用一个函数的常量时,该变量是否应该在本地声明,因为它仅由该函数使用,或全局声明,因为它永远不会改变?

IE更好:

CONSTANT = (1, 3, 5, 8)

##SOME OTHER CODE HERE

def function1(arg):
    if arg in CONSTANT:
        do something

或:

def function1(arg):
    CONSTANT = (1, 3, 5, 8)
    if arg in CONSTANT:
        do something

我知道这两者之间并没有太大区别,但我只是想知道这两种做法中哪一种是首选的,因为我刚开始并希望养成良好的习惯。

3 个答案:

答案 0 :(得分:3)

我会保持本地化。如果需要,您可以随时将其移动到全局,或者通过在类中创建方法并将常量转换为类变量来在函数之间共享它。在这些情况下,一般来说,在本地,更好,最好的方法是在您的函数中隐藏实现信息,如第二个示例中所示。它在这里没有太大的区别,但随着您的项目变得更大,可维护性和模块化将得以持续。

答案 1 :(得分:1)

我会把它们全局化,因为:

  1. 您的变量常量
  2. 在Python中,全局范围封装在模块名称空间中,这意味着您的变量实际上只是模块内的全局变量。
  3. 如果你多次调用你的函数,并将常量放在本地,它会在你每次调用函数时重新分配它们。
  4. 然后你可以在不同的功能之间分享你的常数。
  5. 但是,如果你转向面向对象编程,那么我会将常量作为类变量。

答案 2 :(得分:0)

我会说最好的取决于具体情况

如果执行时间不是问题,那么每次将常量加载到新变量中不会浪费太多时间。这具有明显的优势,即在代码中明确显示常量的使用位置。

否则,全局很好,但我只会出于优化目的。如果我想到它,优化是我问自己同样问题的唯一原因。

使用全局可能有其他充分的理由:

  • 如果您的程序用户经常需要在代码中更改其值而您不想解析程序参数,
  • 如果其他程序需要访问它,

总而言之,我会说:做你认为最好的事情,但尽可能合理地将事物封装在它们所属的地方(当地人更喜欢全球化)。