【问题标题】:How can I dynamically call built in methods such as __doc__ in Python 3?如何在 Python 3 中动态调用 __doc__ 等内置方法?
【发布时间】:2018-12-24 03:22:11
【问题描述】:

我是 Python 新手,我正在打印各种内置 Python 方法的 __doc__。然后我尝试执行以下操作:

for f in dir(__builtins__):
    print('********' + f + '********\n', f.__doc__)

当结果看起来像这样时,我很惊讶:

********abs********
    str(object='') -> str
    str(bytes_or_buffer[, encoding[, errors]]) -> str
********all********
    str(object='') -> str
    str(bytes_or_buffer[, encoding[, errors]]) -> str
********any********
    str(object='') -> str
    str(bytes_or_buffer[, encoding[, errors]]) -> str
********ascii********
    str(object='') -> str
    str(bytes_or_buffer[, encoding[, errors]]) -> str

在做了一些研究之后,我找到了this,但我仍然没有看到我怎样才能做到我希望完成的事情。我知道这毫无意义,但我觉得了解如何在 Python 中动态执行与此类似的任务对我很有用。

感谢您的帮助!

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    dir(__builtins__)(也遍历一个模块)给出模块中的名称以获取必须使用的对象getattr

    for f in dir(__builtins__):
        print('********' + f + '********\n', getattr(__builtins__, f).__doc__)
    

    【讨论】:

      【解决方案2】:

      在您的 for 循环中,您在调用时没有获得实际的函数/方法

      for f in dir(__builtins__):
      

      相反,每次f 只是一个带有函数/方法名称的字符串。所以当你打电话时:

      f.__doc__
      

      你总是能取回str 类型的文档字符串。和打电话没什么区别:

      'abc'.__doc__
      

      【讨论】:

        猜你喜欢
        • 2013-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-05
        • 1970-01-01
        • 1970-01-01
        • 2010-09-21
        相关资源
        最近更新 更多