假设我有一个列表my_list
,一个变量var
,以及一个使用变量修改列表的代码块
my_list = ['foo']
var = 'bar'
my_list.append(var)
在实际任务中,我有很多变量,如var
和很多像append
这样的命令来修改列表。我想将这些命令转发给另一个模块。在手头的情况下,我想有两个模块:modify.py
,其中包含修改命令
my_list.append(var)
和main.py
定义列表和变量,并以某种方式使用modify.py
my_list = ['foo']
var = 'bar'
import_and_run modify
目标是使主文件更具可读性。在我的情况下修改命令可以很好地分组,并且作为单独的模块真的很好。但是,我只知道从模块导入函数时的做法,而不是代码块。我不想让整个modify.py
模块成为函数,因为
1)我不想传递所需的所有参数。相反,我希望modify.py
能够直接访问main.py
名称空间。
2)modify.py
中的代码实际上并不是一个函数。它只运行一次。另外,我不是整个模块都是一个函数体,只是感觉不对。
我如何实现这一目标?还是整个态度都错了?
答案 0 :(得分:1)
如果您的目标是让代码更具可读性,我建议您采取以下措施。
def main(): do_setp1() do_step2() #etc. 返回
将现有代码分成您正在呼叫的功能 main()的
正如@flaschbier建议的那样,将相关的常用参数收集到词典中,以便更容易管理。
考虑在新功能上重复这些步骤,然后进行分解 他们分为子功能。
做得好,您应该留下一个更容易查看的文件,因为函数定义及其缩进的实体会破坏文本流。
代码应该更容易推理,因为你只需要一次理解一个函数,而不是整个脚本。
通常,您希望将与特定任务相关的所有代码保存在单个模块中,除非超过500行。但是在将代码移动到单独的模块之前,看看是否可以通过将重复的代码分解为函数来减少代码总数,或者使代码更简洁:例如,查看for
循环是否可以被列表推导替换。
考虑使用代码linting工具来帮助您使代码格式化。
总而言之:不要将代码隐藏在另一个代码中而违背Python的内容
模块并沿着import_and_run
路线前进。而是使用良好的代码组织和Python固有的良好视觉结构来使您的代码可读。
答案 1 :(得分:1)
顺便说一下,您似乎还没有掌握Python模块的概念。
嗯,Python中的模块是.py
文件。 .py
文件中的每个函数,类或甚至变量都可以导入到另一个程序中。
考虑一个(可能是疯狂的)示例,例如crazy.py
:
class crazyCl:
# crazy stuffs
pass
def crazyFn():
# some another crazy stuffs
crazyVar = 'Please do not try this at home'
现在,要将其中任何一个导入到另一个程序中,在同一文件夹中说goCrazy.py
,只需执行此操作
import crazy # see ma, no .py
if __name__ == '__main__':
print crazy.crazyVar # Please do not try this at home
这是对Python模块的简单介绍。还有许多其他功能,例如必须尝试的软件包。
作为一个简单的介绍,这应该做。希望你有所了解。