代码之家  ›  专栏  ›  技术社区  ›  Chris Snow

ipython选项卡完成显示内置项的方法参数

  •  3
  • Chris Snow  · 技术社区  · 7 年前

    方法参数的IPython选项卡完成显示的信息比我预期的要多:

    snowch$ ipython3
    Python 3.6.2 |Anaconda, Inc.| (default, Sep 21 2017, 18:29:43)
    Type 'copyright', 'credits' or 'license' for more information
    IPython 6.1.0 -- An enhanced Interactive Python. Type '?' for help.
    
    In [1]: from my_package import MyClass
    
    In [2]: cf = MyClass(<TAB>
                           abs()                                 api_key=
                           all()                                 api_key_filename=
                           any()                                 ArithmeticError                       >
                           api_endpoint=                         ascii()
                           ...
    

    实例方法也会发生这种情况:

    In [3]: cf.auth(<TAB>
                     abs()                                 ascii()
                           ...
    

    Q) 我应该看到内置方法吗 abs() 当我在实例方法和构造函数上完成tab时? .

    我的IPCompleter配置如下所示:

    In [4]: %config IPCompleter
    IPCompleter options
    -----------------
    IPCompleter.backslash_combining_completions=<Bool>
        Current: True
    IPCompleter.debug=<Bool>
        Current: False
    IPCompleter.greedy=<Bool>
        Current: False
    IPCompleter.jedi_compute_type_timeout=<Int>
        Current: 400
    IPCompleter.limit_to__all__=<Bool>
        Current: False
    IPCompleter.merge_completions=<Bool>
        Current: True
    IPCompleter.omit__names=<Enum>
        Current: 2
    IPCompleter.use_jedi=<Bool>
        Current: True
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   pedrosaurio    4 年前

    是的,您应该这样做,因为在方法或构造函数中调用函数是完全有效的。实际上,当你调用一个可调用函数时,你可以在任何字段中编写任何表达式。

    MyProgressMeter(any(params))
    range(abs(value_a - value_b))
    obj.frobulate(len(set(items)))
    print(len(my_list))
    

    都是合理的等等 MyProgressMeter(<tab> , obj.frobulate(<tab> , print(<tab> range(<tab> 您将看到本地/全局命名空间中有意义的所有内容,以及命名参数。 当然,实例方法也没有什么不同。

    注:这并不广为人知,但 range 实际上是一个构造函数:

    >>> type(range)
    <class 'type'>