1

我正在开发一个包含十几个不同文件的项目。在每个文件的顶部,我有几乎相同的行,它们导入相同的库并初始化与我的数据库的连接:

import re
import urllib2
import datetime
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.sql import *
from sqlalchemy.orm.collections import *
from table_def import Team, Player, Box_Score, Game, Name_Mapper
from datetime import timedelta
from bs4 import BeautifulSoup as bs
from datetime import date, datetime, timedelta
import numpy as  np
import argparse

engine = create_engine('sqlite:///ncaaf.db', echo=False)
md = MetaData(bind=engine)
Session = sessionmaker(bind=engine)
s = Session()
teams_table = Table("teams", md, autoload=True)
games_table = Table("games", md, autoload=True)
box_scores_table = Table("box_scores", md, autoload=True)
players_table = Table("players", md, autoload=True)
names_table = Table("names", md, autoload=True)

我可以制作一个模块来导入所有这些模块并初始化这个数据库连接吗?那是标准吗?或者由于某种我没有意识到的原因而愚蠢?

4

2 回答 2

2

当您将某些内容导入模块时,它会变得可用,就好像它已在您的模块本身中声明一样。所以,你可以像这样做你想做的事:

common_imports.py

from datetime import date, datetime, timedelta
import numpy as  np
import argparse
...

main_module.py

from common_import import *

a = np.array([])  # works fine

但是,不建议这样做,因为Explicit 比 implicit 更好。例如,如果您这样做,其他人(甚至未来的您)将无法理解所有这些导入模块的来源。相反,尝试更好地组织您的导入,或者将您的模块分解为多个模块。例如,在您的导入列表中,我看到了 argparse、SQL 内容和 numpy,并且我无法对可能需要所有这些不相关库的单个模块进行成像。

于 2013-10-26T00:29:47.823 回答
0

如果您创建一个包,您可以将它们导入__init__.py文件中,尽管我建议将它们留在原处以提高代码可读性。

于 2013-10-26T00:29:03.427 回答