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由于直接执行的就是命令,是有可能带来安全风险的。

  • 相关阅读:
    springboot项目打war包流程
    ant配置文件详解(转)
    如何提升java服务器并发性能
    find用法
    基姆拉尔森计算公式 推导计算星期几
    递归第二弹:分类强化
    拨钟问题
    POJ1222熄灯问题【位运算+枚举】
    POJ1013称硬币【枚举】
    4148生理周期
  • 原文地址:https://www.cnblogs.com/hercules-chung/p/12383232.html
Copyright © 2011-2022 走看看