代码块作为Python中的单独模块

时间:2016-03-30 18:43:11

标签: python

假设我有一个列表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中的代码实际上并不是一个函数。它只运行一次。另外,我不是整个模块都是一个函数体,只是感觉不对。

我如何实现这一目标?还是整个态度都错了?

2 个答案:

答案 0 :(得分:1)

如果您的目标是让代码更具可读性,我建议您采取以下措施。

  • 将您的问题分解为一系列单独的操作。
  • 提供这些操作名称。
  • 在模块中定义一个函数main,它调用名为的函数 行动之后:

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模块的简单介绍。还有许多其他功能,例如必须尝试的软件包。

作为一个简单的介绍,这应该做。希望你有所了解。