简体   繁体   中英

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

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.

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() .

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.

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