【问题标题】:How to get a string representation of a builtin function?如何获取内置函数的字符串表示形式?
【发布时间】:2020-01-14 14:50:30
【问题描述】:

在 Python 中获取内置函数的字符串版本的最佳方法是什么?

>>> import operator
>>> gt = operator.gt
>>> gt
<function _operator.gt>
>>> str(gt)
'<built-in function gt>'

gt 取回&gt; 的最佳方式是什么? (注意:我实际上只需要这些运算符:&gt;&lt;&gt;=&lt;===!=)。

【问题讨论】:

  • 如果您的运算符数量有限,为什么不创建一个字典,将您想要的任何内容映射到这些符号?
  • 这会很好地工作 - 只是有点麻烦。这似乎是某种 python 魔法的类型。
  • 你想做什么?
  • 产生更漂亮的__str__ 方法。不急。

标签: python python-3.x


【解决方案1】:

您可以访问内置函数的 doc 属性,该属性包含描述该函数的有用 cmets。

>>> operator.lt.__doc__
'lt(a, b) -- Same as a<b.'
>>> operator.gt.__doc__
'gt(a, b) -- Same as a>b.'
>>> operator.eq.__doc__
'eq(a, b) -- Same as a==b.'
>>> operator.ne.__doc__
'ne(a, b) -- Same as a!=b.'

【讨论】:

    【解决方案2】:

    在@Milton 给出的答案之上,我们可以做到:

    import re, operator
    
    def get_symbol(op):
        sym = re.sub(r'.*\w\s?(\S+)\s?\w.*','\\1',getattr(operator,op).__doc__)
        if re.match('^\\W+$',sym):return sym
    

    例子:

     get_symbol('matmul')
    '@'
    get_symbol('add')
     '+'
    get_symbol('eq')
    '=='
    get_symbol('le')
    '<='
    get_symbol('mod')
    '%'
    get_symbol('inv')
    '~'
    get_symbol('ne')
    '!='
    

    仅举几例。你也可以这样做:

    {get_symbol(i):i for i in operator.__all__} 
    

    这会给你一个带有符号的字典。你会看到像abs 这样的东西给出的值不正确,因为没有实现符号版本

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-27
      • 1970-01-01
      • 2014-08-23
      • 2015-09-30
      • 1970-01-01
      • 2014-04-19
      • 2019-11-17
      • 1970-01-01
      相关资源
      最近更新 更多