为什么可以';从导入的函数调用时,Python是否找到内置的print函数?

为什么可以';从导入的函数调用时,Python是否找到内置的print函数?,python,Python,以main.py为例: from __future__ import print_function from sub import print print("hello, world") from __future__ import print_function def print(*args, **kwargs): return __builtins__.print(*args, **kwargs) 这个sub.py: from __future__ import print

以main.py为例:

from __future__ import print_function

from sub import print

print("hello, world")
from __future__ import print_function

def print(*args, **kwargs):
    return __builtins__.print(*args, **kwargs)
这个sub.py

from __future__ import print_function

from sub import print

print("hello, world")
from __future__ import print_function

def print(*args, **kwargs):
    return __builtins__.print(*args, **kwargs)
使用Python 2.7.9,运行
main.py
,您将得到:

Traceback (most recent call last):
File "main.py", line 5, in <module>
    print("hello, world")
File "/Users/ien/Studio/songifier/sub.py", line 4, in print
    return __builtins__.print(*args, **kwargs)
AttributeError: 'dict' object has no attribute 'print'
回溯(最近一次呼叫最后一次):
文件“main.py”,第5行,在
打印(“你好,世界”)
文件“/Users/ien/Studio/songiener/sub.py”,第4行,打印
返回内置打印(*args,**kwargs)
AttributeError:“dict”对象没有属性“print”
为什么以及如何做到这一点

注意:这是一个人工示例,用于隔离在日志上下文中出现的问题,
print
函数有时会执行一些奇特的日志记录,而其他时候只想调用内置的print函数。

尝试以下方法:

import __builtin__
from __future__ import print_function

def print(*args, **kwargs):
    return __builtin__.print(*args, **kwargs)

>>打印
>>>打印(“你好”,“世界”,sep=“\n”)
你好
世界
您看到的错误原因可以通过以下内容的摘录得到更好的解释:

默认情况下,当在
\uuuuu主模块中时,
\uuuuuuu内置模块是
内置模块
\uuuuuuuuuuuuuuuuuu
(注:无);在任何其他情况下 模块,
\uuuuuuuuuuuuuuuuuu
\uuuuuuuuuuuuuuuuuuuuuu内置
模块本身

\uuuuu内置项\uuuuuu
可以设置为用户创建的字典以创建 限制执行的软弱形式

CPython实现细节:用户不应触摸
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;严格来说,这是一个实施细节。使用者
要覆盖内置名称空间中的值,应
import
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
(否)模块)并修改其属性 适当地。模块的命名空间将自动创建 第一次导入模块时


引用对这个问题的回答:

在Python2.x中不能,因为print不是一个函数,而是一个函数 陈述在Python3中,print是一个函数,所以我想它可能是 已覆盖(但尚未尝试)