简体   繁体   中英

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 with '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). Ie, 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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM