I've been trying to learn how to write a function in the Python that prints two words, only two, "Hello World." I've been trying for six months. And today, friends, I've done it.
I've read so many places that you can make print statements in the Python like so:
print "Hello World!"
But where do you type this in? How do you tell the computer, the Python, the whatever, that you want it to take this sequence of characters, interpret it as code, and execute it?
Well, I hope you are sitting down, because I've found the answer: the exec
statement (or function if you're into the Python 3)!
Let's say you want the Python to execute the definition of a function like:
def foo():
print "Hello World!"
You can accomplish this by firing up the Python interpreter and typing:
>>> exec("def foo():\n print 'Hello World!'\n")
exec
here takes in a string of the Python code and executes it! The \n
and the whitespace between the \n
and the print
statement are very important! The Python needs those to understand where the function ends.
So now, we can see that foo
exists and is a function that prints "Hello World!"
>>> foo
<function foo at 0x10b611230>
>>> foo()
Hello World!
exec
can also take in code
objects. We can make a code
object by using the compile
function:
>>> c = compile("def bar():\n print 'Hello World!'\n", '', 'exec')
>>> c
<code object <module> at 0x10b5f88b0, file "", line 1>
compile
takes in a string of code, a filename (we can just pass it the empty string), and a mode, which can be 'exec', 'eval', or 'single'.
Let's pass c
into exec
to execute the code and define our bar
function:
>>> exec(c)
>>> bar()
Hello World!
Yes! We did it again! This is a victorious day.
Interestingly enough, functions themselves have code
objects assigned to them as attributes:
>>> bar.__code__
<code object bar at 0x10b5f81b0, file "", line 1>
And we can overwrite these code
objects with our own code
objects!
>>> new_code = compile("print 'Hello, We Are Victorious Beings!'\n", '', 'exec')
>>> new_code
<code object <module> at 0x10b5f81b0, file "", line 1>
>>> bar.__code__ = new_code
>>> bar.__code__
<code object <module> at 0x10b5f81b0, file "", line 1>
>>> bar()
Hello, We Are Victorious Beings!
Neat! We don't need the "def bar():"
part in the string we pass to compile
because at this point, bar
already exists and we're just overwriting the code in the body of the bar
function.
Share in the comments if you know of any other ways to print statements in the Python!
Comments