When you do print string_function you aren't actually calling the function. Were You At Home Yesterday Which Tense, If you want to pass an argument to functions of Python. } You could set the argument as None, and check if it is passed or not, def do_something (calculate=None): if calculate is None: # do that return 'Whatever' if calculate == "something expected": # do this return 'Whateverelse'. And just like any other object, you can return a function from a function. } When the return statement is executed, the return value is copied from the function back to the caller.