代码之家  ›  专栏  ›  技术社区  ›  Wai Yip Tung

如何在任何范围内按名称查找属性?

  •  4
  • Wai Yip Tung  · 技术社区  · 14 年前

    如何在任何范围内按名称查找属性?我的第一个尝试是使用globals()和locals()。例如

    >>> def foo(name):
    ...   a=1
    ...   print globals().get(name), locals().get(name)
    ...
    >>> foo('a')
    None 1
    >>> b=1
    >>> foo('b')
    1 None
    >>> foo('foo')
    <function foo at 0x014744B0> None
    

    到现在为止,一直都还不错。但是,它无法查找任何内置名称。

    >>> range
    <built-in function range>
    >>> foo('range')
    None None
    
    >>> int
    <type 'int'>
    >>> foo('int')
    None None
    

    关于如何查找内置属性有什么想法吗?

    3 回复  |  直到 14 年前
        1
  •  4
  •   Duncan    14 年前
    >>> getattr(__builtins__, 'range')
    <built-in function range>
    
        2
  •  2
  •   ChristopheD    14 年前

    使用 __builtin__ (没有 s 最后,如Triptych和Duncan建议的那样):

    >>> import __builtin__
    >>> getattr(__builtin__, 'range')
    <built-in function range>
    

    __builtins__ CPython-implementation 因此,特定的代码不易移植。

        3
  •  0
  •   Kenan Banks    14 年前

    使用 __builtins__ “超级世界”。它正好包含你要找的东西