写点什么

好用的 eval | python 小知识

作者:AIWeker
  • 2023-04-20
    福建
  • 本文字数:585 字

    阅读完需:约 2 分钟

今天和大家介绍一个 python 内置的函数:好用的 eval。

1. eval 的好处

eval 的功能是将一个字符串转换成 python 对象,比如可以将浮点型字符转换为浮点型进行运算。


float_str = "8.8"print(eval(float_str),  type(eval(float_str)), type(float_str))
# 8.8 <class 'float'> <class 'str'>
复制代码


这似乎没什么了不起,强制类型转换而已。我们再来看一个例子:


fn_str = "sum([2, 3, 4])"print(eval(fn_str))# 9
复制代码


从上可知,eval 可以将函数调用的字符串直接转换函数的执行。


eval 的另一个场景是:通过字符串(通常是在配置文件里)选择需要执行的函数, 见如下例子:


def process_a(info):    print("A: {}".format(info))    def process_b(info):    print("B: {}".format(info))    fn_select = "a"process_fn = eval('process_{}'.format(fn_select))process_fn('this is process ')# A: this is process 
复制代码


上面例子中,我们提供了不同处理函数 process_*,实际调用的时候可能会根据不同情况调用不同处理函数,或者尝试不同的处理函数的差异,我们就可以通过 eval 来将函数名转换为函数对象。

2. eval 的注意事项

由于 eval 能够将字符串转换为实际的对象,如果是函数调用,就会执行;所以使用 eval 的时候,要避免不良的字符串命令, 如:


eval("__import__('os').system('rm -rf /home/*')")
复制代码


上述例子把 home 目录所有数据都删除了;所以避免 eval 里的参数接受公开的输入。

发布于: 刚刚阅读数: 2
用户头像

AIWeker

关注

InfoQ签约作者 / 公众号:人工智能微客 2019-11-21 加入

人工智能微客(aiweker)长期跟踪和分享人工智能前沿技术、应用、领域知识,不定期的发布相关产品和应用,欢迎关注和转发

评论

发布
暂无评论
好用的eval | python小知识_Python_AIWeker_InfoQ写作社区