我对使用Python导入模块的多种方式感到有些困惑。
import X
import X as Y
from A import B
我一直在阅读有关范围和名称空间的信息,但是我想获得关于什么是最佳策略,在什么情况下以及为什么使用的最佳实践建议。导入应该在模块级别还是方法/功能级别进行?在__init__.py
或模块代码本身中?
尽管“ Python软件包-按类导入,而不是文件”确实没有回答我的问题,尽管它显然是相关的。
在我们公司的生产代码中,我们尝试遵循以下规则。
我们将导入文件放置在文件的开头,紧随主文件的文档字符串之后,例如:
"""
Registry related functionality.
"""
import wx
# ...
现在,如果我们导入的类是导入模块中为数不多的类之一,那么我们将直接导入名称,因此在代码中我们仅需使用最后一部分,例如:
from RegistryController import RegistryController
from ui.windows.lists import ListCtrl, DynamicListCtrl
但是,有些模块包含数十个类,例如,所有可能的异常的列表。然后,我们导入模块本身,并在代码中对其进行引用:
from main.core import Exceptions
# ...
raise Exceptions.FileNotFound()
我们import X as Y
尽可能少地使用,因为这会使搜索特定模块或类的使用变得困难。但是有时候,如果您想导入两个名称相同但存在于不同模块中的类,则必须使用它,例如:
from Queue import Queue
from main.core.MessageQueue import Queue as MessageQueue
通常,我们不会在方法内部进行导入-它们只会使代码变慢并且可读性降低。有些人可能会发现这是轻松解决循环导入问题的好方法,但是更好的解决方案是代码重组。
问题内容: 建议不要中使用。 可以分享原因,以便下次避免这样做吗? 问题答案: 因为它将很多东西放到你的命名空间中(可能会遮盖以前导入的其他对象,你对此一无所知)。 因为你不完全知道要导入的内容,而且不容易找到从哪个模块导入的特定内容(可读性)。 因为你不能使用像静态检测代码中的错误之类的出色工具。
问题内容: 我必须为我的OJT公司编程一个应用程序管理系统。前端将在C#中完成,后端将在SQL中完成。 现在,我从来没有做过这样的项目。在学校里,我们只有关于SQL的基本课程。不知何故,我们的老师完全没有讨论SQL注入,而我直到现在才通过网上阅读与之接触。 所以无论如何,我的问题是:如何防止C#中的SQL注入?我模糊地认为,可以通过适当地屏蔽应用程序的文本字段来做到这一点,以使其仅接受指定格式的输
问题内容: 刚刚收到评论,我静态导入该方法不是一个好主意。静态导入是DA类中的一种方法,该类主要具有静态方法。因此,在业务逻辑的中间,我有一个da活动,显然似乎属于当前类: 审阅者并不希望我更改代码,也没有,但是我确实同意他的观点。不能静态导入的原因之一是方法的定义位置令人困惑,它不在当前类中,也不在任何超类中,因此花了太多时间来确定其定义(基于Web的审阅系统没有可点击的像IDE这样的链接:-)
问题内容: 我想计算一个可迭代对象满足给定条件的数量。我想以一种清晰,简单,最好是合理的方式进行操作。 我目前最好的想法是: 和 第一个是基于迭代器的,对于大列表来说可能更快。它与您用于测试任何和所有测试的表单相同。但是,这取决于int(True)== 1,这有点难看。 第二个对我来说似乎更容易阅读,但是它与任何和所有形式都不同。 有没有人有更好的建议?我缺少某处的库函数吗? 问题答案: 基于迭代
有这样一个应用程序结构,其中是根目录,“app”和“package1”是两个并行包: *注意:最后一个位于根目录“myapp”中 如何解决ImporDerror:尝试在没有已知父包的情况下进行相对导入 我想应用“解决方案1”,但不明白我应该把main.py放在哪里,它的内部代码是什么,或者相反,它可能是像这样的空文件
问题内容: 给 正如它应该。然而, 给 ,但无论它是正数还是负数,我都希望它向0舍入(即,我希望-1/2为0)。最好的方法是什么? 问题答案: 进行浮点除法,然后转换为int。无需额外的模块。 Python 3: Python 2: