Function returns None without return statement

后端 未结 7 1840
北荒
北荒 2020-11-21 06:19

I just learned (am learning) how function parameters work in Python, and I started experimenting with it for no apparent reason, when this:

def jiskya(x, y):
         


        
相关标签:
7条回答
  • 2020-11-21 06:31

    It's the return value of the function, which you print out. If there is no return statement (or just a return without an argument), an implicit return None is added to the end of a function.

    You probably want to return the values in the function instead of printing them:

    def jiskya(x, y):
        if x > y:
            return y
        else:
            return x
    
    print(jiskya(2, 3))
    
    0 讨论(0)
  • 2020-11-21 06:37

    Ya, basically you are using print statements in your function as a way to return information. You shouldn't do this. Print is NOT the same as a return statement. If you simply want your function to give your answer without the none, just type jiskya(2, 3) instead. You will see what the function throws out because you have print statements in the function. If instead you typed "return" in your function, it wouldn't give you anything without the "print" preceding the function call.

    0 讨论(0)
  • 2020-11-21 06:38

    Where did the 'None' come from?

    The function.

    And what is it?

    It's what the function returned.

    In Python, every function returns something. It could "be multiple things" using a tuple, or it could "be nothing" using None, but it must return something. This is how we deal with the fact that there is no way to specify a return type (which would make no sense since you don't specify types for anything else). When interpreted as a string for printing, None is replaced with the string "None".

    None is a special object that is supposed to represent the absence of any real thing. Its type is NoneType (it is an instance of that class). Whenever you don't explicitly return anything, you implicitly return None.

    You wrote the function to print one of the two values x or y, but not to return anything. So None was returned. Then you asked Python to print the result of calling the function. So it called the function (printing one of the values), then printed the return value, which was None, as the text "None".

    0 讨论(0)
  • 2020-11-21 06:47

    Consider following examples:

    Function without return statement

    Print() function type is none type..

    def test1():
    
        print("code...!!!")
    
    type(test1())
    
    Output: code...!!!
            NoneType
    

    Function with return statement

    Returning variable 'a' which holds print() function, that's why type() returns data type of print function which is NoneType, not the data type of what's inside the print funcion:

    def test1():
    
        a= print("code...!!!")
        
        return a
    
    type(test1())
    
    
    Output: code...!!!
            NoneType
    

    Here function returning data type of variable 'a' which holds a string in it.

    def test1():
    
        a = "First code...!!!"
        
        return a
    
    type(test1())
    
    
    Output: str
    
    
    0 讨论(0)
  • 2020-11-21 06:49

    The problem is you wrote print jiskya(2,3). You're passing the return value of jiskya to the print function. jiskya itself prints x or y, which is why you see the 2. But then the print in the print jiskya(2, 3) statement itself executes with no argument.

    To the interpreter, this is a simplification of what happens:

    print jiskya(2,3)
    >> Executing jiskya with arguments 2, 3
    >> jiskya evaulates `print x`
    >> 2 is printed
    >> Function jiskya exits with no return value
    print None
    >> None is printed
    
    0 讨论(0)
  • 2020-11-21 06:50

    You are doing two prints, the first one in the corpus of your function and the second one is printing the result of the function, which as actually None.

    You should rather do something like this:

    def yourfunction(x, y):
        if x > y:
            return y
        else:
            return x
    

    Then,

    >>> print yourfunction(2, 3)
    2
    
    0 讨论(0)
提交回复
热议问题