Python 的 eval() 函数用法与示例
eval() 函数是 Python 中内置的一个函数,用于将一个字符串作为代码进行运行。它的形式为:
eval(expression, globals=None, locals=None)
其中,expression 表示一个字符串表达式,globals 和 locals 都是可选参数,用于指定全局和局部命名空间。可以将 eval() 函数看作是将字符串转换为可执行的 Python 代码的工具。
eval() 函数的主要作用是在运行时动态地生成 Python 代码,提高程序的灵活性和可扩展性。它可以将一个字符串解析为 Python 对象,可以是一个数字、字符串、列表、元组、字典、甚至是一个函数或类。
下面是几个 eval() 函数的实例:
1. 计算表达式
eval() 函数可以将一个字符串表达式解析为数字进行计算。例如:
>>>eval("2 + 3")
5
2. 将字符串转换为列表或元组
eval() 函数可以将一个字符串解析为列表或元组对象。例如:
>>>eval("[1, 2, 3]")
[1, 2, 3]
>>>eval("(1, 2, 3)")
(1, 2, 3)
3. 将字符串转换为字典
eval() 函数也可以将一个字符串解析为字典对象。例如:
>>>eval("{'a': 1, 'b': 2, 'c': 3}")
{'a': 1, 'b': 2, 'c': 3}
4. 调用函数
eval() 函数还可以通过字符串调用一个函数。例如:
>>>def add(a, b):
... return a + b
...
>>>eval("add(2, 3)")
5
5. 动态创建类
eval() 函数还可以动态创建一个类。例如:
>>>Student = eval("class Student: pass")
>>>s = Student()
>>>type(s)
<class '__main__.Student'>
6. 拼接 SQL 查询语句
eval() 函数在数据库编程中也很常用,可以将字符串拼接成 SQL 查询语句。例如:
>>>table_name = "User"
>>>condition = "name='Lucy'"
>>>sql = "select * from {} where {}".format(table_name, condition)
>>>rows = eval("conn.execute('{}')".format(sql))
使用 eval() 函数需要注意一些安全问题,不要直接将用户输入的字符串作为参数传入 eval() 函数中,可能会造成安全问题。建议使用 ast.literal_eval() 函数代替 eval(),它只会评估字面值表达式,不会执行任意代码。
