Python代码组织帮助:导入函数

时间:2016-01-30 19:56:55

标签: python module packages code-organization

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

当前代码:

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我调用位于calcloads的函数calc_stuff.py),该函数使用tables.py中的函数。我是否应该将所有功能保存在一个文件中,而不是将功能分成不同的文件?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

我认为@tjohnson的答案很棒。我只想在问题3中添加一些内容。听起来你已经编写了很多函数,并且你试图通过放置不在" active development"之外的函数来使你的代码/文件更易于管理。进入某种图书馆。在这种情况下,是的,将函数存储在一组单独的文件中不是问题。但是,通过" flat比嵌套"更好。原则上,它可以提高查找的容易度,将它们全部放在一个非常长的.py文件中,然后在该文件的注释中放入一个目录,或者在导入后立即打印目录。

获取目录的一种快速而简单的方法如下。假设您的长文件名为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