Python:如何在整个程序中使函数可见

时间:2009-11-01 23:10:08

标签: python

我有两个函数,如下所示:

def fitnesscompare(x, y):    
    if x.fitness>y.fitness:
        return 1
    elif x.fitness==y.fitness:
        return 0
    else:  #x.fitness<y.fitness
        return -1

与'sort'一起使用以对类实例的不同属性进行排序。

这些用于程序中的其他功能和方法。

我可以在任何地方看到它们,而不是必须将它们传递给使用它们的每个对象吗?

由于

2 个答案:

答案 0 :(得分:6)

最好的方法(获得您询问的可见性)是将此def语句放在模块中(比如fit.py),import fit来自需要访问已定义项的任何其他模块在这一个中,根据需要在任何这些模块中使用fit.fitnesscompare

你问什么,你真正需要什么,实际上可能会有所不同......:

正如我在今天早些时候的另一篇文章中所解释的,自定义比较函数是在Python中自定义排序的最佳方式(这就是为什么在Python 3中它们甚至不再被允许):而是,自定义键提取功能将为您提供更好的服务(面向未来,更通用,更快)。即,而不是打电话,说

somelist.sort(cmp=fit.fitnesscompare)

呼叫

somelist.sort(key=fit.fitnessextract)

,其中

def fitnessextract(x):
   return x.fitness

或者,为了真正超快的速度,

import operator
somelist.sort(key=operator.attrgetter('fitness'))

答案 1 :(得分:1)

使用def定义一个函数使该函数在您定义的范围中可用。在模块级别,使用def将使该函数可用于任何该模块内的其他功能。

您是否可以发布 not 为您工作的示例?您发布的代码似乎与您的实际问题无关。