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

  • 相关阅读:
    放弃我最喜爱的网络,全面转入软件开发
    [推荐]制作div+css圆角
    一个页面多个超连接的实现
    C#基类和派生类
    代码不是重点, 领悟OO思想(一)
    C#params 有什么用?
    计算机族必喝的健康饮品
    今天再做上传图片时候遇到了一个JS 图片预览问题
    C#中split的5种方法
    [推荐]制作div+css圆角
  • 原文地址:https://www.cnblogs.com/hercules-chung/p/12383232.html
Copyright © 2011-2022 走看看