开发者

Python: how to make a function visible throughout a program

I have two functions like the following:

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

that are used w开发者_如何学运维ith 'sort' to sort on different attributes of class instances.

These are used from within other functions and methods in the program.

Can I make them visible everywhere rather than having to pass them to each object in which they are used?

Thanks


The best approach (to get the visibility you ask about) is to put this def statement in a module (say fit.py), import fit from any other module that needs access to items defined in this one, and use fit.fitnesscompare in any of those modules as needed.

What you ask, and what you really need, may actually be different...:

as I explained in another post earlier today, custom comparison functions are not the best way to customize sorting in Python (which is why in Python 3 they're not even allowed any more): rather, a custom key-extraction function will serve you much better (future-proof, more general, faster). I.e., instead of calling, say

somelist.sort(cmp=fit.fitnesscompare)

call

somelist.sort(key=fit.fitnessextract)

where

def fitnessextract(x):
   return x.fitness

or, for really blazing speed,

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


Defining a function with def makes that function available within whatever scope you've defined it in. At module level, using def will make that function available to any other function inside that module.

Can you perhaps post an example of what is not working for you? The code you've posted appears to be unrelated to your actual problem.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜