eval_衡量_转化为列表
回忆
- 上次 深入了 index函数
- 可以 找到某对象的位置
- 如果 列表中 有多个指定元素
- 可以通过 index函数的start和end参数
- 指定位置列表的下标索引
- 可以 用中括号 索引到 相应的元素
- 还可以 替换相应的元素
- 和 字符串 效果一样
- 字符串中字符
- 不能通过 索引下标 直接 修改?
- 这怎么办??🤔
绕道
s = "oeasy" char_list = list(s) char_list char_list[2] = "A" char_list s = "" for c in char_list: s += c
- 通过list列表
- 曲则全
- 枉则直
- 绕路才能到成功
- 如果 字符串能转成 列表
- 那列表 能转化为 字符串 吗?
尝试
- 把 列表 再转化 为 字符串
- 最终 得到了
- 一个字符串
- 一个 内容 为列表的 字符串
- 这和我想象的不一样啊
- 有 什么办法 能够
- 将 str(list("oeasy")) 这个字符串
- 转化回 列表 吗?🤔
eval
- eval
- 可以把字符串
- 转化为对应的数据类型
# 这是你的字符串,它表示一个列表 s = str(list("oeasy")) # 使用 eval() 将字符串转换回列表 # 请确保字符串来源是安全的 my_list = eval(s) # 打印结果 print(my_list)
- 这次把 将列表转化为的字符串
- 转化回了列表
- 既然是 evalute
- 可以完成 字符串中的 计算吗?
具体使用
eval("1 + 1") eval("1 * 1 + 2")
- 如何理解 eval函数 呢?
eval
help(eval)
- eval函数的参数是
- 字符串source
- eval函数
- 根据本地和全局的变量
- 将 source
- 衡量 (evaluate)出来
- 被衡量的字符串
- 可以使用
变量
吗?
根据变量
a = 5 eval("6 * a")
- 根据变量a的值
- 可以导入模块吗?
导入模块
import math eval(str("math.pi")) eval(str("math.pi * 10 ** 2"))
- 确实是可以 导入模块的
使用函数
eval("len(\"oeasy\")") eval("len(\"oeasy\") + 1")
- 尝试使用len函数
- 如果len被 赋值了呢?
len被赋值
len = 1 len eval("len(\"oeasy\")")
- 果然出错了
- eval的时候
- 会执行 参数字符串
- 不能 把数值 赋给 函数名
- 那样会 覆盖掉 函数
- 命名的时候 有什么
禁忌
吗?
变量命名的禁忌
int = 5 int("5")
- int 是
类名
- 一旦 作为
变量名
之后 - 就
不再
是 类名 了 - 也没法完成 整型变量的 初始化 了
- 类似的还有str
str = "oeasy" str("oeasy")
- str 如果成了变量
- 就不再是 str类型了
- list 也会这样吗?
问题
- 本来 list 是一个 class
- 如果你把他赋值成了一个空列表
- list 就变成了一个对象的名字
- 一个变量 variable
- 就无法执行 list 类的构造函数了
- 类名 被覆盖
- 类 就不能用了
总结
- 这次了解了eval函数
- 根据本地和全局的变量
- 将 source
- 衡量 (evaluate)出来
- 要特别注意
- 类名 str、int、list 不能作为变量名
- 那样 会 覆盖掉 类
- 字符串 中 索引值 可以 是 负数
- 列表中 索引值 可以是 负数吗?🤔