我有两个函数,如下所示:
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'一起使用以对类实例的不同属性进行排序。
这些用于程序中的其他功能和方法。
我可以在任何地方看到它们,而不是必须将它们传递给使用它们的每个对象吗?
由于
答案 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 为您工作的示例?您发布的代码似乎与您的实际问题无关。