允许Python文件相互导入的好处是什么?

2024-09-27 18:02:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道有多少次我被咬了,因为我不小心把我的文件命名为我要导入的东西,结果python导入了这个文件。如果/在PYTHONPATH中,这个示例应该显示我在说什么(我的第一个示例不起作用):

/foo
  __init__.py
/test
  foo.py

__init__.py

def do_thingy():
    print "Swosh!"

foo.py

from foo import * # Whops! Self include. Happy debugging.

do_thingy() # Not imported. You fail.

当应用程序、模块、插件出现此错误时,似乎会无声地失败,而调试的方法(我被告知)是转到shell并导入所有内容,直到找到损坏的内容。你知道吗

递归导入有什么实际用途吗?你知道吗


Tags: 文件pytest示例内容fooinitdef
2条回答

Python名称空间要求每个名称都是不同的。每当您导入模块时,它总是导入到全局命名空间中。在前端,这些只是简单的任务。如果导入的内容与已存在的名称冲突,它将自动替换该名称所指定的引用。你知道吗

您不会希望Python在每次重新分配变量时都“提醒”您,那么为什么您希望Python对模块导入也这样做呢?你知道吗

例如:

import foo as bar
bar = None

你猜怎么着?您刚刚用值None替换了分配给bar的模块对象。你知道吗

最后,回答您的问题:递归导入从来都不是一个好主意,因为它们充其量是混乱的,最坏的情况是危险的。你知道吗

不,导入你自己是没有用的。但是,有两件东西可以用同一个名字进口也没有用,所以没有必要去发现你给的案子并对其进行特殊处理。你知道吗

相关问题 更多 >

    热门问题