Why does returning in Interactive Python print to sys.stdout?

后端 未结 5 1458
挽巷
挽巷 2021-01-16 04:18

I ran into something different today. Consider this simple function:

def hi():
    return \'hi\'

If I call it in a Python shell,

         


        
相关标签:
5条回答
  • 2021-01-16 04:38

    First of all, its not returnning, and it's not related to functions. You just have an expression that evaluates to an object (big surprise! everything in Python is an object).

    In this case, an interpreter can choose what to display. The interpreter you're using apparently uses __repr__. If you'd use IPython, you'd see there's a whole protocol, depending on the frontend, determining what will be displayed.

    0 讨论(0)
  • 2021-01-16 04:39

    It is a feature of the interactive shell. Yes, it is supposed to happen. The benefit is that it makes interactive development more convenient.

    0 讨论(0)
  • 2021-01-16 04:45

    Most interactive shells use a REPL loop - read-eval-print.

    They read your input. They evaluate it. And they print the result.

    Non-function examples are (using the ipython shell):

    In [135]: 3+3
    Out[135]: 6    # result of a math operation
    
    In [136]: x=3    # no result from an assignment
    
    In [137]: x
    Out[137]: 3    # evaluate the variable, and print the result - its value
    
    0 讨论(0)
  • 2021-01-16 04:49

    The interactive interpreter will print whatever is returned by the expression you type and execute, as a way to make testing and debugging convenient.

    >>> 5
    5
    >>> 42
    42
    >>> 'hello'
    'hello'
    >>> (lambda : 'hello')()
    'hello'
    >>> def f():
    ...     print 'this is printed'
    ...     return 'this is returned, and printed by the interpreter'
    ...
    >>> f()
    this is printed
    'this is returned, and printed by the interpreter'
    >>> None
    >>>
    

    See Read–eval–print loop on Wikipedia for more information about this.

    0 讨论(0)
  • 2021-01-16 04:49

    In Python's interactive mode, expressions that evaluate to some value have their repr() (representation) printed. This so you can do:

    4 + 4
    

    Instead of having to do:

    print(4 + 4)
    

    The exception is when an expression evaluates to None. This isn't printed.

    Your function call is an expression, and it evaluates to the return value of the function, which isn't None, so it is printed.

    Interestingly, this doesn't apply to just the last value evaluated! Any statement that consists of an expression that evaluates to some (non-None) value will print that value. Even in a loop:

    for x in range(5): x
    

    Different Python command lines can handle this in different ways; this is what the standard Python shell does.

    0 讨论(0)
提交回复
热议问题