pythonprintingstdout

The difference between sys.stdout.write and print?


Are there situations in which sys.stdout.write() is preferable to print?

(Examples: better performance; code that makes more sense)


Solution

  • print is just a thin wrapper that formats the inputs (modifiable, but by default with a space between args and newline at the end) and calls the write function of a given object. By default this object is sys.stdout, but you can pass a file using the "chevron" form. For example:

    print >> open('file.txt', 'w'), 'Hello', 'World', 2+3
    

    See: https://docs.python.org/2/reference/simple_stmts.html?highlight=print#the-print-statement


    In Python 3.x, print becomes a function, but it is still possible to pass something other than sys.stdout thanks to the fileargument.

    print('Hello', 'World', 2+3, file=open('file.txt', 'w'))
    

    See https://docs.python.org/3/library/functions.html#print


    In Python 2.6+, print is still a statement, but it can be used as a function with

    from __future__ import print_function
    

    Update: Bakuriu commented to point out that there is a small difference between the print function and the print statement (and more generally between a function and a statement).

    In case of an error when evaluating arguments:

    print "something", 1/0, "other" #prints only something because 1/0 raise an Exception
    
    print("something", 1/0, "other") #doesn't print anything. The function is not called