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