简体   繁体   中英

How to check which function has been returned in python?

I have two methods which take different number of arguments. Here are the two functions:

def jumpMX(self,IAS,list):
    pass
def addMX(self,IAS):
    pass

I am using a function which will return one of these functions to main.I have stored this returned function in a variable named operation. Since the number of parameters are different for both,how do I identify which function has been returned?

if(operation == jumpMX):
    operation(IAS,list)
elif(operation == addMX):
    operation(IAS)

What is the syntax for this?Thanks in advance!

You can identify a function through its __name__ attribute:

def foo():
  pass

print(foo.__name__)

>>> foo

...or in your case:

operation.__name__ #will return either "jumpMX" or "addMX" depending on what function is stored in operation

Here's a demo you can modify to your needs:

import random #used only for demo purposes 

def jumpMX(self,IAS,list):
    pass
def addMX(self,IAS):
    pass


def FunctionThatWillReturnOneOrTheOtherOfTheTwoFunctionsAbove(): 
    # This will randomly return either jumpMX()
    # or addMX to simulate different scenarios
    funcs = [jumpMX, addMX]
    randomFunc = random.choice(funcs)
    return randomFunc

operation = FunctionThatWillReturnOneOrTheOtherOfTheTwoFunctionsAbove()
name = operation.__name__

if(name == "jumpMX"):
    operation(IAS,list)

elif(name == "addMX"):
    operation(IAS)

You can import those functions and test for equality like with most objects in python.

classes.py

class MyClass:
    
    @staticmethod
    def jump(self, ias, _list):
        pass
    
    @staticmethod
    def add(self, ias):
        pass

main.py

from classes import MyClass


myclass_instance = MyClass()
operation = get_op()  # your function that returns MyClass.jump or MyClass.add 

if operation == MyClass.jump:
    operation(myclass_instance, ias, _list)
elif operation == MyClass.add:
    operation(myclass_instance, ias)

However, I must emphasize that I don't know what you're trying to accomplish and this seems like a terribly contrived way of doing something like this.

Also, your python code examples are not properly formatted. See the PEP-8 which proposes a standard style-guide for python.

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