如何在Python中评估字符串并返回对象?


通过使用Python中的`eval()`函数,我们可以评估字符串并返回一个Python对象。`eval()`是Python的内置函数,它通过将字符串解析为代码表达式来评估字符串参数。

语法

eval(expression[, globals[, locals]])

参数

  • 表达式:将被评估为Python表达式的字符串。

  • globals:可选参数,是一个包含全局参数的字典。

  • locals:可选参数,是一个包含局部参数的字典。

  • 返回值:返回从表达式计算的结果。

如果字符串包含算术表达式

如果我们将包含算术表达式的字符串传递给`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()`函数还可以评估包含列表/元组的字符串。这意味着它根据字符串数据返回列表/元组对象。

示例

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()`函数后返回了一个元组对象。

示例

与之前的示例类似,`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字典对象。

更新于:2023年8月23日

993 次浏览

启动你的职业生涯

通过完成课程获得认证

开始学习
广告