为什么我看不到将来导入的print函数的参数?

时间:2016-08-28 18:09:41

标签: python python-2.7 python-3.x printing

我注意到在使用from __future__ import print_function导入后,我无法使用新的python函数刷新。在我发现我发现的原因的过程中,我甚至无法检查它所需的参数/参数。为什么?

  1. 首先,我确保检查功能有效。
  2. 然后我确保打印功能确实是一个功能。
  3. 在这两个之后(似乎通过/检查)我试图检查它但是失败并返回了一个奇怪的错误。
  4. 这就是我所做的:

    from __future__ import print_function
    
    import inspect
    
    def f(a, b=1):
        pass
    
    #print( print_function )
    print( inspect.getargspec( f ) )
    g = print
    print('what is print: ', print)
    print('what is g=print: ', g)
    print( inspect.getargspec( g ) )
    #print( inspect.getargspec( print ) )
    
    #print('Hello', flush=True)
    

    除了检查打印外,一切都通过了:

    ArgSpec(args=['a', 'b'], varargs=None, keywords=None, defaults=(1,))
    what is print?  <built-in function print>
    what is g=print?  <built-in function print>
    Traceback (most recent call last):
      File "print_future.py", line 16, in <module>
        print( inspect.getargspec( g ) )
      File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 816, in getargspec
        raise TypeError('{!r} is not a Python function'.format(func))
    TypeError: <built-in function print> is not a Python function
    

    为什么会这样?

    这是我的python和系统的一些信息:

    Python 2.7.11 (default, Jun 24 2016, 21:50:11)
    [GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    

2 个答案:

答案 0 :(得分:2)

摘自signature

  

请注意

     

某些callables在某些实现中可能无法内省   蟒蛇。例如,在CPython中,C中定义的内置函数   没有提供有关其论点的元数据。

我发布了签名文档,因为inspect.getargspec自3.0以来已弃用

答案 1 :(得分:1)

在{3.3}中将flush关键字添加到print()。

C函数通常不带有内省所需的信息。这只是C如何定义和编译的事实。作为替代,签名被添加到他们的文档字符串中。如果inspect不起作用,IDLE calltips将回退到docstring。

在3.4中,添加了一种新机制,以包含具有C编码功能的签名属性。新的inspect.signature在使用时使用它。一些C编码函数已被转换为包含新属性,许多没有。