代码之家  ›  专栏  ›  技术社区  ›  Roni Gadot

线性回归的标准化目标值

  •  0
  • Roni Gadot  · 技术社区  · 4 年前

    当一个对象有数百个方法时,制表符补全就很难使用了。有趣的方法通常是被检查对象的类而不是基类定义或重写的方法。

    看起来像是无证的 inspect.classify_class_attrs(cls) inspect.getmro(cls) 提供我需要的大部分信息(这些信息最初是为了实现python的 help(object) 功能)。

    默认情况下,readline按字母顺序显示完成,但用于显示完成的函数可以替换为ctypes或Python2.6及更高版本中包含的readline模块。我已经覆盖了readline的completions显示,它工作得很好。

    现在我只需要一个方法来合并每个类的信息(从 inspect.* 根据每个实例的信息,按方法解析顺序对结果进行排序,打印和分页。

    0 回复  |  直到 16 年前
        1
  •  5
  •   joeforker    16 年前

    因为我还没有使用Python 2.6或3.0,而且没有 readline.set_completion_display_matches_hook() completion_display_func 如此:

    from ctypes import *
    
    rl = cdll.LoadLibrary('libreadline.so')
    
    def completion_display_func(matches, num_matches, max_length):
        print "Hello from Python"
        for i in range(num_matches):
            print matches[i]
    
    COMPLETION_DISPLAY_FUNC = CFUNCTYPE(None, POINTER(c_char_p), c_int, c_int)
    hook = COMPLETION_DISPLAY_FUNC(completion_display_func)
    ptr = c_void_p.in_dll(rl, 'rl_completion_display_matches_hook')
    ptr.value = cast(hook, c_void_p).value
    

    现在,当我按“tab”完成时,我自己的函数会打印完成列表。所以这就回答了“如何改变readline显示完成的方式”的问题。

        2
  •  1
  •   Brian    16 年前

    我认为这不容易完成。在任何情况下,Ipython都没有执行它的机制。

    最初我以为你可以修改Ipython的源代码来改变顺序(例如通过改变 dir2() 函数膝关节.py). 但是它看起来像readline按字母顺序对传递给它的完成进行排序,因此这将无法工作(至少在没有 许多

        3
  •  1
  •   joeforker    16 年前

    readline.set_completion_display_matches_hook([function]) (Python2.6中的新功能)显示结果。完成程序会像往常一样返回一个可能性列表,但也会存储 inspect.classify_class_attrs(cls) 如适用。这个 completion_display_matches_hook 必须保存对完成符的引用才能检索最新的完成列表以及我要查找的分类信息,因为在其参数中只接收到匹配名称的列表。然后钩子以令人愉快的方式显示完成列表。