从包导入所有函数:“from.*import*”

2024-05-14 09:47:36 发布

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

目标

我希望能够从包中的每个文件导入(在__init__.py上)所有函数。

用法

例如在这个文件夹结构中。

manage.py
- scripts/
   -- __init__.py
   -- tests.py
   -- deploy.py

我目前正在做以下工作:

管理.py:

from scripts import *

脚本/init.py:

from .tests import *
from .deploy import *

但是,每次我向包中添加另一个文件时,都必须在script/__init__.py上添加一个导入行,这有点烦人。


Tags: 文件函数frompyimport脚本文件夹用法
2条回答
  1. importlib允许您从字符串名称导入任何Python模块。您可以通过查看路径中的文件列表来实现自动化。

  2. 使用__all__更像是Python。查看here了解更多详细信息。

你可以手动操作,但你不应该这样做。

为什么你真的不想这样做:

最后,您将得到一个名称空间,在该名称空间中,理解什么是什么以及从何而来将非常困难,随着整个项目的规模增加,难度也会增加。从对Python完全不感兴趣开始,想想其他任何人可能会查看您的代码,甚至更糟,想想自己在1个月后重新阅读它,却不记得发生了什么。你的生活不需要这样。

除此之外,向导入程序公开的任何可能与其他模块中的其他函数重叠的函数都将被最新导入的函数着色。举个例子,想想两个包含相同函数foo()的脚本,然后观察会发生什么。

>>> from scrpt1 import *
>>> foo()
Script 1
>>> from scrpt2 import *
>>> foo()
Script 2

在你的生活中也不需要这些。特别是当你很容易通过直白的表达来绕过它们的时候。


以下是^{}中包含的文本中的一些相关行:

Explicit is better than implicit.

明确定义函数的位置。不要“意大利面”你的代码。如果你选择在一个地方把所有的东西都放在一个网格里,你会想在未来击中自己。

Special cases aren't special enough to break the rules.

真是不言而喻。

Namespaces are one honking great idea -- let's do more of those!

“更多!”,不是更少;不要错过名称空间是多么美妙。Python是基于它们的;在不同的命名空间中分离代码是组织代码的基础。

相关问题 更多 >

    热门问题