Loop
Loop

Reputation: 179

How can I assign a function to a variable without running it?

Whenever I assign a variable to a function, it runs the function. As a result, if I were to have a print statement in the function, it would print the text even though all I want to do is assign but not run the function. I don't believe this is the case in many other programming languages such as C++, so is there a core concept that I'm missing here?

def function(x):
    print("Text From Function")
    return 3*x

y = function(2)

I expect there to be no output but the actual output is: Text From Function

Upvotes: 5

Views: 6286

Answers (3)

brentertainer
brentertainer

Reputation: 2200

Going from the comments by @ParitoshSingh, @LiranFunaro, and @TrevinAvery, you either want to use a lambda or functools.partial to assign a function with prepopulated arguments to a new name.

import functools

def function(x):
    print("Text From Function")
    return 3*x

y1 = lambda: function(2)
y2 = functools.partial(function, 2)

These are then invoked with y1() and y2().

Upvotes: 3

Vincent Quirion
Vincent Quirion

Reputation: 399

This is because functions are made so that you don't have to rewrite the same code over and over again, so when you're writing:

function(2)

it executes the entire code written in

def function(x):

which includes printing text.

If you want to assign the function to a variable, you need to write:

y = function

without brackets and you will be able to do

result = y(2)

However, you cannot assign the value returned by the function without printing the text if the print() function is in your function def. If you want to get the returned value without the printed text, you need to get rid of the print() function in your function def code.

Upvotes: 1

Anto
Anto

Reputation: 76

If you have function a and want to assign it to variable y you simply do:

def a():
  print("hello")
y = a
y()

In this case running y() will print "hello". If you use parenthesis after a function it will call it and return whatever the function returns, not the function itself.

Upvotes: 6

Related Questions