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
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
>>> 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'.
exec to execute the code and define our
>>> 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
>>> 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
Share in the comments if you know of any other ways to print statements in the Python!