In the book that I am reading on Python, it keeps using the code eval(input('blah'))
I read the documentation, and I understand it, but I still do not see how it changes the input()
function.
What does it do? Can someone explain?
In the book that I am reading on Python, it keeps using the code eval(input('blah'))
I read the documentation, and I understand it, but I still do not see how it changes the input()
function.
What does it do? Can someone explain?
The eval function lets a python program run python code within itself.
eval example (interactive shell):
>>> x = 1 >>> eval('x + 1') 2 >>> eval('x') 1
eval()
interprets a string as code. The reason why so many people have warned you about using this is because a user can use this as an option to run code on the computer. If you have eval(input())
and os
imported, a person could type into input()
os.system('rm -R *')
which would delete all your files in your home directory. (Assuming you have a unix system). Using eval()
is a security hole. If you need to convert strings to other formats, try to use things that do that, like int()
.
In Python 2.x input(...)
is equivalent to eval(raw_input(...))
, in Python 3.x raw_input
was renamed input
, which I suspect lead to your confusion (you were probably looking at the documentation for input
in Python 2.x). Additionally, eval(input(...))
would work fine in Python 3.x, but would raise a TypeError
in Python 2.
In this case eval
is used to coerce the string returned from input
into an expression and interpreted. Generally this is considered bad practice.
Eval() evaluates the passed string as a Python expression and returns the result. For example, eval("1 + 1") interprets and executes the expression "1 + 1" and returns the result (2).
One reason you might be confused is because the code you cited involves a level of indirection. The inner function call (input) gets executed first so the user sees the "blah" prompt. Let's imagine they respond with "1 + 1" (quotes added for clarity, don't type them when running your program), the input function returns that string, which is then passed to the outer function (eval) which interprets the string and returns the result (2).
Read more about eval here.
One of useful applications of eval() is to evaluate python expressions from string. For example load from file string representation of dictionary:
running_params = {"Greeting":"Hello "} fout = open("params.dat",'w') fout.write(repr(running_params)) fout.close()
Read it out as a variable and edit it:
fin = open("params.dat",'r') diction=eval(fin.read()) diction["Greeting"]+="world" fin.close() print diction
Output:
{'Greeting': 'Hello world'}
Maybe a misleading example of reading a line and interpreting it.
Try eval(input())
and type "1+1"
- this should print 2
. Eval evaluates expressions.
eval()
, as the name suggests, evaluates the passed argument.
input()
is now raw_input()
in python 3.x versions. So the most commonly found example for the use of eval()
is its use to provide the functionality that input()
provided in 2.x version of python. raw_input returned the user-entered data as a string, while input evaluated the value of data entered and returned it.
eval(input("bla bla"))
thus replicates the functionality of input()
in 2.x, i.e., of evaluating the user-entered data.
In short: eval() evaluates the arguments passed to it and hence eval('1 + 1') returned 2.
Lot's of good answers here, but none describe the use of eval
in the context of its globals=