为什么可以';从导入的函数调用时,Python是否找到内置的print函数?
以main.py为例:为什么可以';从导入的函数调用时,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
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是一个函数,所以我想它可能是
已覆盖(但尚未尝试)