zoukankan      html  css  js  c++  java
  • python反射的作用并与eval对比

    反射就是通过字符串的形式,导入模块;通过字符串的形式,去模块寻找指定函数,并执行。利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动!

    有时候也是为了防止使用eval这种比较危险的函数。

    常用的几个函数

    # hasattr,getattr
    
    # 类名.名字
        getattr(类名,'名字')
    # 对象名.名字
        getattr(对象,'名字')
    # 模块名.名字
        import 模块
        getattr(模块,'名字')
    # 自己文件.名字
        import sys
        getattr(sys.modules['__main__'],'名字')

     而eval函数则是用来执行一个字符串表达式,并返回表达式的值。

    >>>x = 7
    >>> eval( '3 * x' )
    21
    >>> eval('pow(2,2)')
    4
    >>> eval('2 + 2')
    4
    >>> n=81
    >>> eval("n + 4")
    85

    e串的形式,导入模块;通过字符串的形式,去模块寻找指定函数,并执行。利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动!

    有时候也是为了防止使用eval这种比较危险的函数。

    常用的几个函数

    # hasattr,getattr
    
    
    
    # 类名.名字
    
        getattr(类名,'名字')
    
    # 对象名.名字
    
        getattr(对象,'名字')
    
    # 模块名.名字
    
        import 模块
    
        getattr(模块,'名字')
    
    # 自己文件.名字
    
        import sys
    
        getattr(sys.modules['__main__'],'名字')

     而eval函数则是用来执行一个字符串表达式,并返回表达式的值。

    >>>x = 7
    
    >>> eval( '3 * x' )
    
    21
    
    >>> eval('pow(2,2)')
    
    4
    
    >>> eval('2 + 2')
    
    4
    
    >>> n=81
    
    >>> eval("n + 4")
    
    85

    eval由于直接执行的就是命令,是有可能带来安全风险的。

  • 相关阅读:
    Chapter 7 Integrity(完整性), Views(视图), Security(安全性), and Catalogs(目录)
    Qt计时器
    linux命令:linux文件处理命令
    JSON.stringify()的不常见用法
    flex知识点归纳
    css伪类
    开发资源汇总
    Math.cbrt() Math.sqrt() Math.pow()
    代码开发注意事项和规范
    关于数组数据容易忽略的点
  • 原文地址:https://www.cnblogs.com/hercules-chung/p/12383232.html
Copyright © 2011-2022 走看看