2016-01-30 21 views
0

我写了一些代码,但它都位于一个文件中。现在工作很烦人,因为它太长了。所以我想我应该把所有的功能放在不同的文件中,然后导入它们。我只是不确定要这样做的最佳方式。Python代码组织帮助:导入函数

目前代码:

import glob, os 
import csv as csv 
import pandas as pd 
import numpy as np 
import sys 

def create_list(var):  
    stuff 
def store_table(var): 
    stuff 
def geo_info(var): 
    stuff 
def factor_loads(var): 
    stuff 
def add_loads(var): 
    stuff 
def calc_bypass_stress(var): 
    a lot of stuff 
def calcloads(var): 
    tons of stuff and calls other functions above  

for i in list: 
    for k in another_list: 
     calcloads(var) 

我在想,我可以把它分解了,这样做的查询功能和创建表在tables.py;任何计算的东西是calc_stuff.py,我从thehead.py运行一切:

tables.py

def create_list(var):  
    stuff 
def store_table(var): 
    stuff 
def geo_info(var): 
    stuff 
def factor_loads(var): 
    stuff 
def add_loads(var): 
    stuff 

calc_stuff.py

def calc_bypass_stress(var): 
    a lot of stuff 
def calcloads(var): 
    tons of stuff and calls other functions above  

thehead.py

import glob, os 
import csv as csv 
import pandas as pd 
import numpy as np 
import sys 
from tables import * 
from calc_stuff import * 

for i in list: 
    for k in another_list: 
     calcloads(var) 

一些问题:

1)请问这项工作?

2)几乎所有的函数都使用Pandas,Numpy等等。我是否需要将这些包导入到每个.py文件中?或者只是在thehead.py

3)从thehead.py我打电话给位于calc_stuff.py的函数(calcloads),它使用位于tables.py的函数。我是否应该将所有功能保存在一个文件中,而不是将功能分成不同的文件?

回答

2
  1. 是的。
  2. 您需要导入每个.py文件中的包。
  3. 把功能分成不同的文件不是问题。如果你的文件变得很长,那肯定是个好主意。
+0

1)当你说导入包中的每个。 py文件,我是否也将我创建的文件导入到每个文件中? 2)我会'calc_stuff.py文件中的calc_stuff import *',但是? 3)我是否将'from calc_stuff import *'放在tables.py中? – user1964692

+0

1)是的。 2)不,脚本不应该尝试导入自己。 3)是和否。你需要一个import语句,但在Python中强烈阻止通配符导入,所以我建议'import calc_stuff'。 – tjohnson

2

我认为@tjohnson的回答非常好。我只是在问题3中添加了一些内容。这听起来像是你写了很多函数,并且你正试图通过将不在“活跃开发”之下的函数放入某种库中来使代码/文件更易于管理。在这种情况下,是的,将函数存储在一组单独的文件中并不是问题。但是,通过“单元比嵌套”的原则,它可以提高查找的容易性,将它们全部放在一个非常长的文件中,然后在该文件的注释中放入一个目录,或者打印一张表导入内容后即可使用。

一个快速和肮脏的方式来获取目录如下。假设你很长的文件被称为mymod1.py。然后,你可以这样写:

编辑为要简化:(使用@kojiro here一个想法)

from mymod1 import * 
import mymod1 # to get it in the namespace 
def my_toc(module): 
    exclude = ['date','pprint'] # list of callables imported via `from foo import bar` 
    for item in dir(module): 
     if (item not in exclude and 
      callable(getattr(module, item, locals().get(item)))): 
      print(item) 
my_toc(mymod1) 

输出:

myfunc_1 
myfunc_2 
myfunc_3 # etc