Python 如何评估字符串并返回一个对象
通过使用Python中的eval()函数,我们可以评估一个字符串并返回一个Python对象。eval() 是一个Python内置函数,它通过解析字符串作为代码表达式来评估一个字符串参数。
语法
eval(expression[, globals[, locals]])
参数
- expression: 要作为Python表达式计算的字符串。
-
globals: 可选参数,包含全局参数的字典。
-
locals: 可选参数,包含局部参数的字典。
-
Return: 返回从表达式计算的结果。
如果字符串包含算术表达式
如果我们将包含算术表达式的字符串传递给eval()函数,首先它解析表达式,然后计算它,最后返回计算得到的Python对象。
示例
var = 100
string_EXP_1 = "2*4"
string_EXP_2 = "var + 20"
print("string expression 1: ", string_EXP_1)
print("string expression 2: ", string_EXP_2)
# use the eval method
result_1 = eval(string_EXP_1)
result_2 = eval(string_EXP_2)
print("Output for Expression 1: ", result_1)
print("Output for Expression 1: ", result_2)
输出
string expression 1: 2*4
string expression 2: var + 20
Output for Expression 1: 8
Output for Expression 1: 120
正如我们在上面的示例中所看到的,eval()成功评估了形成的字符串算术表达式并返回了一个整数对象。我们还可以看到函数访问了一个全局变量x。
如果字符串包含列表/元组
eval()函数还可以评估包含列表/元组的字符串。这意味着它基于字符串数据返回一个列表/元组对象。
示例1
string = "1, 2"
print("Input String: ", string)
print('type', type(string))
# apply the eval method
result = eval(string)
print("Output : ", result)
print("Output object type: ", type(result))
输出
Input String: 1, 2
type <class 'str'>
Output : (1, 2)
Output object type: <class 'tuple'>
输入字符串包含两个由逗号分隔的元素,在Python中,逗号分隔的值被视为元组的元素。因此,上述示例在应用eval()函数后返回了一个元组对象。
示例2
与上一个示例类似,eval()函数评估字符串并返回一个列表对象。
string = "[45, 9, 16]"
print("Input String: ", string)
print('type', type(string))
# apply the eval method
result = eval(string)
print("Output : ", result)
print("Output object type: ", type(result))
输出
Input String: [45, 9, 16]
type <class 'str'>
Output : [45, 9, 16]
Output object type: <class 'list'>
如果包含列表解析表达式的字符串
eval()函数可以评估列表解析表达式,并返回一个Python列表对象,如果输入字符串包含列表解析表达式。
示例
eval函数成功评估了列表解析表达式,并返回一个Python列表对象。
string = '[a*2 for a in range(5)]'
print("Input String: ", string)
print('type', type(string))
# apply the eval method
result = eval(string)
print("Output : ", result)
print("Output object type: ", type(result))
输出
Input String: [a*2 for a in range(5)]
type <class 'str'>
Output : [0, 2, 4, 6, 8]
Output object type: <class 'list'>
如果包含一个Python字典的字符串
如果字符串包含一个Python字典,则eval()方法会返回一个原始的Python字典对象。
示例
String_dict = "{'One': 1, 'two': 2, 'three': 3}"
print("String represented dictionary: ",String_dict)
print(type(String_dict))
# use the eval method
dict_ = eval(String_dict)
print("Output: ", dict_)
print(type(dict_))
输出
String represented dictionary: {'One': 1, 'two': 2, 'three': 3}
<class 'str'>
Output: {'One': 1, 'two': 2, 'three': 3}
<class 'dict'>
如我们在上面的输出块中看到,eval()
函数返回一个 Python 字典对象。