Python 代码组织帮助:导入函数
Python code organization help: importing functions
我写了一些代码,但它们都在一个文件中。现在使用它有点烦人,因为它太长了。所以我想我应该把所有的功能放在一个不同的文件中,然后导入它们。我只是不确定执行此操作的最佳方法。
当前代码:
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
的函数。我是否应该将所有函数保存在一个文件中,而不是将函数拆分到不同的文件中?
- 是的。
- 您需要在每个 .py 文件中导入包。
- 将功能拆分到不同的文件中不是问题。如果您的文件变得很长,那绝对是个好主意。
我觉得@tjohnson 的回答很好。我只想在问题 3 中添加一些内容。听起来您已经编写了很多函数,并且您正试图通过将不在 "active development" 下的函数放入某种库中来使您的代码/文件更易于管理.在那种情况下,是的,将您的函数存储在一组单独的文件中不是问题。但是,按照 "flat is better than nested" 原则,将它们全部放在一个很长的 .py
文件中,然后将 table 内容放在该文件的注释中,可能会提高查找的便利性,或在导入后即时打印 table 内容。
获取内容 table 的一种快速而肮脏的方法如下。假设您的超长文件名为 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
我写了一些代码,但它们都在一个文件中。现在使用它有点烦人,因为它太长了。所以我想我应该把所有的功能放在一个不同的文件中,然后导入它们。我只是不确定执行此操作的最佳方法。
当前代码:
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
的函数。我是否应该将所有函数保存在一个文件中,而不是将函数拆分到不同的文件中?
- 是的。
- 您需要在每个 .py 文件中导入包。
- 将功能拆分到不同的文件中不是问题。如果您的文件变得很长,那绝对是个好主意。
我觉得@tjohnson 的回答很好。我只想在问题 3 中添加一些内容。听起来您已经编写了很多函数,并且您正试图通过将不在 "active development" 下的函数放入某种库中来使您的代码/文件更易于管理.在那种情况下,是的,将您的函数存储在一组单独的文件中不是问题。但是,按照 "flat is better than nested" 原则,将它们全部放在一个很长的 .py
文件中,然后将 table 内容放在该文件的注释中,可能会提高查找的便利性,或在导入后即时打印 table 内容。
获取内容 table 的一种快速而肮脏的方法如下。假设您的超长文件名为 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