‫到目前为止, 我们已经了解了一些组织Python代码的方法｡
‫第一件我们做得很好的事情, 我们只是把Python写在一个文件里, 这样就可以组织它了, 对吗？
‫到目前为止, 我们的整个代码都在一个文件中｡
‫这是我们组织代码的一种方式｡
‫接下来, 我们学习了函数, 函数是一种避免重复编写代码的方法｡
‫我们可以编写函数, 在文件中的任何地方都可以使用,
‫这样我们就可以一遍又一遍地调用这些函数, 我们可以适当地命名这些函数, 这样我们的代码就有意义了, 包装得很好, 方便我们使用｡
‫所有这些都是为了让我们保持代码整洁, 使代码更易于维护, 从而保持代码的组织性｡
‫因为当我们写的代码越多, 就越难把所有的东西都记在脑子里｡
‫如果其他人加入您的工作组来处理您的项目, 他们需要一种简单的方法来了解工作是如何进行的｡
‫但我们仍然有一个问题, 这个问题是, 所有的东西都包含在这一个文件｡
‫我们编写的所有函数都在一个点pi文件中｡
‫但在真实的生活中, 情况并非如此｡
‫我们有更多代码, 我们不能只拥有一个包含数百万行代码的文件｡
‫那么, 我们如何保持井然有序？
‫好吧, 我知道了
‫如果我们有多个Python文件｡
‫像这样是因为我们的项目越来越大｡
‫这样行吗？
‫有没有办法把所有这些文件连在一起？
‫事实上, 在整个行业中, 这是一种非常普遍的做法,
‫我们称这种组织代码的方式为模块｡
‫模块就是这些文件｡
‫这些文件中的每一个, 每一个点pi文件都是一个模块｡
‫通过构建这些模块, 就像我们构建了不同的函数, 就像我们构建了不同的类,
‫因为在这些文件中, 我们可以有类, 我们可以有函数, 但我们也可以有不同的文件｡
‫所以再上一层来划分代码｡
‫在这一节中, 我们将学习所有关于模块的知识, 并试图掌握它, 看看我们如何编写有组织的代码｡
‫我们来看看｡
‫你可以在这里看到, 如果我点击涟漪中的文件, 我们会有一个主pi, 每次我点击运行,
‫这个文件就会运行｡
‫但是如果我们有更多的文件呢？
‫如果我在这里添加另一个文件, 我们将其命名为Utility Dot Pi, 会怎么样？
‫那么根据我刚才教你们的, 这两件事是什么？
‫它们是模块, 对吧？
‫主Pi是一个模块实用程序｡
‫PI是一个模块｡
‫在编写模块时, 我们使用的原则和Python中的变量一样, 也就是snake case｡
‫也就是说, 如果有空格, 我们用下划线, 所有的都是小写字母｡
‫那么, 我们如何划分这些模块呢？
‫而这需要练习｡
‫当你刚开始的时候, 很难说, 嘿, 什么进了什么文件, 什么进了什么文件？
‫但这和上课很相似, 对吧？
‫类似于函数｡
‫我们希望将代码划分为有意义的块｡
‫再说一次, 假设我们在Netflix工作｡
‫我们可能有一个专门用于视频的文件, 我们可能有另一个专门用于用户登录的文件或模块,
‫也许还有另一个专门用于分析和为用户提供建议的文件｡
‫我们希望将这些类和函数组合在一个有意义的文件中｡
‫现在, 使用模块最常见的方式之一是类似于实用程序的方式｡
‫假设我们要创建一个实用程序模块, 该模块包含很多非常简单的函数,
‫就像工具带一样, 我们可以在整个项目中使用这些函数, 因为我们可以想象这里有多个文件｡
‫让我们来举一个非常简单的例子｡
‫我会说这里存在一个乘法函数
‫这需要一个一号和麻木｡
‫在这里我们将返回一个非常简单的函数.
‫同样, 我们还有一个除法函数｡
‫是的, 这是无用的, 因为我们可以在Python中使用加号或除法操作数｡
‫但请听我说｡
‫我想给你们举个例子｡
‫好吧, 我会的
‫第二, 我将返回数字1除以数字2｡
‫漂亮又简单｡
‫所以这个｡
‫是我们的实用程序模块, 它为我们提供了所有这些功能｡
‫现在请注意, 我们实际上没有在这个文件中做任何事情｡
‫我只是在定义函数, 但并没有运行任何函数｡
‫但是假设我们有一个实用程序模块, 我想在我的主py文件中使用它｡
‫我们该怎么做呢？
‫我们在这两个文件之间进行通信的方式非常简单｡
‫我们需要做的就是使用导入命令, 然后为给予指定要导入的文件名｡
‫我们要导入什么？
‫我们希望导入实用程序就像这样｡
‫请注意, 我没有添加点py, 因为我们假设要导入的文件都是python文件｡
‫所以我们不需要这样做｡
‫只是名字｡
‫就像那样｡
‫现在, 让我们在这里打印实用程序｡
‫如果我运行这个｡
‫哇哦｡
‫你看到了吗？
‫我们有来自的模块实用程序, 这是这个网站为我们生成的文件路径, 所以这并不重要｡
‫这里发生了一些事情
‫一个是我们制作了这个py现金文件夹｡
‫下划线｡
‫PY现金｡
‫还有｡
‫哦, 天哪, 这是什么胡言乱语？
‫嗯嗯嗯
‫这是这是相当混乱, 对不对？
‫这个饼图缓存是在我们每次运行一个文件时创建的, 比如说, 导入语句｡
‫所以当我们使用模块的时候｡
‫你看, Pi Cash做的是当我们点击Run的时候｡
‫解释器会创建这个播客文件夹, 它会说, 嘿,
‫我正在运行这个文件, 这个主pi文件, 任何可能不是py文件导入的文件, 比如说实用程序｡
‫在我们的情况下, 我要兑现它｡
‫所以看这里是怎么写的｡
‫看, 这是因为它使用了C Python解释器｡
‫记住, 这是C语言的python, 也就是C编写的解释器, 所以这实际上是一个编译过的文件｡
‫所以下次我在主pi上点击run的时候, 什么都没有改变, 因为接下来发生的不是加载实用程序pi,
‫而是加载这个编译后的实用程序, 因为什么都没有改变｡
‫和效用pi｡
‫这让事情更快｡
‫当我试图再次运行主Pi时, 这就是缓存｡
‫缓存是, 嘿, 我会记住这一点, 这是编译版本,
‫所以我不必再经历编译步骤｡
‫但请注意, 主pi文件不会被编译, 因为我们每次都运行它｡
‫现在, 如果我们将实用程序函数更改为不包含除法, 我单击“运行”, 您在这里不会注意到它｡
‫但是现在已经重新运行了, 因为我们有一个不同的文件｡
‫你可以看到这里有乘法但没有除法｡
‫让我们再回到除法｡
‫返回此处, 单击“运行”｡
‫就这样｡
‫我们这里现在也有分歧
‫但这是我们不能碰的东西｡
‫这只是在我们使用的任何编辑器的引擎盖下面｡
‫在几个视频中, 我们将向大家展示, 当我们使用饼图时, 这也是如何发生的｡
‫这只是编辑允许我们做的事情, 这样我们的程序可以运行得更快｡
‫所以我现在有权限了｡
‫让我们把它弄小一点｡
‫我现在可以访问实用程序了｡
‫有趣的是｡
‫如果我真的在这里画了点, 看看这个｡
‫我可以使用除法和乘法, 这样我就可以把数字相乘｡
‫比如说两次和三次点击运行｡
‫我可以使用主文件中的实用程序模块｡
‫非常, 非常酷｡
‫如果进行除法运算并单击“运行”｡
‫我也可以用这个｡
‫非常, 非常酷｡
‫如果这里有一个不同的文件, 我想导入另一个文件, 我可以导入任意多次｡
‫假设有一个实用程序要归档｡
‫好吧, 我可以导入, 并导入尽可能多的东西, 我想和使用他们对我的文件｡
‫这很酷吧？
‫所以现在我们有了一种方法来组织我们的代码, 并让所有这些文件一起通信｡
‫因为在真实的生活中, 我们有大项目, 这些大项目将由不同的团队, 不同的程序员来完成｡
‫我们需要一种方法来处理这些文件｡
‫通过在模块之间使用import语句, 我们能够使用函数,
‫就像我们能够在不同的文件之间使用函数提供的功能一样｡
‫大多数情况下, 如果你在公司工作, 点pi文件的前几行通常是import语句,
‫因为你通常要和其他文件通信｡
‫让我们在下一个视频中了解更多信息｡