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

  • 相关阅读:
    JSON 在 IE 下不执行的问题
    一些UTF8编码问题
    如果你也想做一个Pinterest?
    关于apache虚拟机的NameVirtualHost错误
    如何玩转数据库设计
    mysql 导入数据时 max_allowed_packet 的问题
    几个练习题
    数组,for语句(补10.11)
    MySql数据库
    js基础(补10.10)
  • 原文地址:https://www.cnblogs.com/hercules-chung/p/12383232.html
Copyright © 2011-2022 走看看