while True:
content = file.readline()
# 将字典类型的字符串转换为字典
if content == '':
break
dict1 = eval(content)
# 创建一个student对象
# 字典前面+ ** 可以转换为 key = 值的 这种关键字参数赋值形式
# 将学员信息赋值给对象
s1 = Student(**dict1)
self.students_list.append(s1)
1.eval()函数作用:
# 示例 1:计算简单的表达式
expression = "2 + 3 * 4"
result = eval(expression)
print(result) # 输出: 14
# 示例 2:将字符串转换为列表
string_list = "[1, 2, 3, 4, 5]"
list_result = eval(string_list)
print(list_result) # 输出: [1, 2, 3, 4, 5]
# 示例 3:将字符串转换为字典
string_dict = "{'name': 'Alice', 'age': 25}"
dict_result = eval(string_dict)
print(dict_result) # 输出: {'name': 'Alice', 'age': 25}
缺点:使用 eval()
函数需要谨慎,因为它可能执行不可信的代码,导致安全问题。
2.**dict1的作用:
在代码 s1 = Student(**dict1)
中,**dict1
的作用是将字典 dict1
进行解包,将其键值对作为关键字参数传递给 Student
类的构造函数或方法。
例如,如果 dict1 = {'name': 'Alice', 'age': 20}
,那么 **dict1
就相当于将字典中的键值对作为独立的参数传递,效果类似于 Student(name='Alice', age=20)
。
这样可以方便地将字典中的数据直接用于对象的初始化,而无需逐个提取字典中的键值对再进行赋值。但要注意,使用这种方式时,字典中的键必须与 Student
类的构造函数或方法所接受的参数名匹配。