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

0 投票
2 回答
1531 浏览
提问于 2025-04-15 15:34

我有两个函数,像下面这样:

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 个回答

1

def 来定义一个函数,这样这个函数就可以在你定义它的地方使用。比如说,如果你在一个模块的最外层用 def 定义了一个函数,那么这个函数在这个模块里的其他函数中都可以用。

你能不能给个例子,说明是什么地方不工作呢?你发的代码看起来和你真正的问题没有关系。

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'))

撰写回答