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