在python中导入模块的最pythonic方法是什么

Art*_*nka 11 python python-import

任何人都可以建议我在python中导入模块的最pythonic方式是什么?让我解释一下 - 我已经阅读了很多python代码,并找到了几种不同的方法来导入模块或者更精确 - 何时导入:

  1. 使用一个模块/几个模块,其中包括整个项目所需的所有导入(第三方模块),因此所有导入都集中在少数模块中,因此很容易维护导入.当任何单个模块需要导入任何模块时,请询问参考模块.例如,在我们的项目中,我们将名为'references'的级别分开,因此它包含'system.py'(包含对所有系统库的引用),'platform.py'(包含对所有平台库的引用)等模块,'devexpress.py' '(包含对所有devexpress库的引用)等.这些模块看起来像:
  2. 每个模块都在模块的顶部导入所有必需的类和函数 - 例如,在项目的每个模块中都有一个导入部分
  3. 每个函数/类在本地使用导入,例如在定义之后,仅导入他们真正需要的东西.

请在下面找到样品.

1个示例导入模块 - 只有'import'和'from ... import ...'语句(没有任何方法或类):

#references.py
import re
import clr
import math

import System
import System.Text.RegularExpressions
import System.Random
import System.Threading
import System.DateTime

# System assemblies

clr.AddReference("System.Core")
clr.AddReference("System.Data")
clr.AddReference("System.Drawing")
...

#test.py
from references.syslibs import (Array, DataTable, OleDbConnection, OleDbDataAdapter,
                                 OleDbCommand, OleDbSchemaGuid)

def get_dict_from_data_table(dataTable):
    pass
Run Code Online (Sandbox Code Playgroud)

2个模块带有'import'和'from ... import ...'以及方法和类:

from ... import ...
from ... import ...

def Generate(param, param1 ...):
    pass
Run Code Online (Sandbox Code Playgroud)

3模块带有'import'和'from ... import ...'语句,这些语句在方法和类中使用:

import clr
clr.AddReference("assembly")       

from ... import ...
...

def generate_(txt, param1, param2):
  from ... import ...
  from ... import ...
  from ... import ...

  if not cond(param1): res = "text"
  if not cond(param2): name = "default"
Run Code Online (Sandbox Code Playgroud)

那么在python中导入模块的最pythonic方法是什么?

Ign*_*ams 14

真的无所谓,只要你不from ... import *.其余的都是品味和解决循环导入问题.PEP 8指出你应该在脚本的顶部导入,但即使这样也不是一成不变的.


Dae*_*yth 5

人们已经评论了主要的样式问题(在脚本的顶部等),所以我会跳过它.

对于我的导入,我通常按模块名称按字母顺序排序(无论是'import'还是'from ... import ...'.我将它分成以下组:标准库;第三方模块(来自pypi或其他);内部模块.

import os
import system

import twisted
import zope

import mymodule_1
import mymodule_2
Run Code Online (Sandbox Code Playgroud)