title: What is the difference between a statement and a function in Python?
body: <p>Edit: <em>The suggested duplicate, does not answer my question, as I am primarily concerned with the difference in Python specifically. The suggested duplicate is far broader than this question.</em></p>
  
  <p>I have recently started to learn Python. I'm currently reading <em>"Learn Python the Hard Way"</em>. I have some ad-hoc programming experience, but am going back to the beginning to learn everything from the ground up this time. </p>
  
  <p>In the book, one of the first lessons concerns <code>print</code> and the author provides various instructions of its use in Python 2.7, e.g.:  </p>
  
  <pre><code>print "This is fun."
  </code></pre>
  
  <p>I found myself wondering what <code>print</code> is technically called here from the programming perspective. <a href="https://www.python.org/dev/peps/pep-3105/" rel="noreferrer">Some research found this, PEP-3105</a></p>
  
  <p>In which case is made to make <code>print</code> a function:  </p>
  
  <blockquote>
    <p>The print statement has long appeared on lists of dubious language
    features that are to be removed in Python 3000, such as Guido's
    "Python Regrets" presentation <a href="https://www.python.org/dev/peps/pep-3105/" rel="noreferrer">1</a> . As such, the objective of this PEP
    is not new, though it might become much disputed among Python
    developers.</p>
  </blockquote>
  
  <p>So <code>print</code> is a statement in Python 2.7, and a function in Python 3. </p>
  
  <p>But I have been unable to find a straight-forward definition for the difference between a <code>statement</code> and a <code>function</code>. I found <a href="https://mail.python.org/pipermail/python-dev/2005-September/056154.html" rel="noreferrer">this</a> also by the person who invented Python, <em>Guido van Rossum</em> in which he explains why it would be good to make print a function instead of a statement.</p>
  
  <p>From what I have read it appears that a function is some code that takes parameters and returns a value. But isn't <code>print</code> doing this in python 2.7? Isn't it taking in strings and returning a concatenated string? </p>
  
  <p>What is the difference between a statement and a function in Python? </p>