13 | 搭建积木:Python 模块化
该思维导图由 AI 生成,仅供参考
简单模块化
- 深入了解
- 翻译
- 解释
- 总结
Python模块化开发技术总结 本文深入介绍了Python中的模块化开发技术。首先,作者介绍了简单模块化的方式,包括将函数、类、常量拆分到不同的文件,并通过import语句进行调用。随后,作者讨论了项目模块化的重要性,强调了相对路径和绝对路径的概念,并指出在大型工程中尽可能使用绝对位置是第一要义。此外,作者还分享了在Facebook和Google等公司中的代码仓库独有的优点,包括简化依赖管理、版本统一和代码追溯。最后,通过一个示例展示了如何使用PyCharm创建项目,并演示了如何进行跨模块调用。文章还介绍了Python的Virtual Environment和`if __name__ == '__main__'`的用法。总结来说,本文系统介绍了Python模块化开发的基本概念和实践方法,对于想要系统学习模块化的读者来说,是一篇很有价值的文章。
《Python 核心技术与实战》,新⼈⾸单¥59
全部留言(85)
- 最新
- 精选
- Jingxiao置顶思考题答案: 很多回复说的很对,from module_name import * 会把 module 中所有的函数和类全拿过来,如果和其他函数名类名有冲突就会出问题;import model_name 也会导入所有函数和类,但是调用的时候必须使用 model_name.func 的方法来调用,等于增加了一层 layer,有效避免冲突。2019-06-093249
- 上梁山文章中有这么一句话:“import 同一个模块只会被执行一次,这样就可以防止重复导入模块出现问题。” “import 同一个模块只会被执行一次”,这句话让我这个新手有点困惑。 这里的只会被执行一次,指的是导入模块的语句只执行一次,还是指被导入的模块中的语句只执行一次。 我相信很多向我这样的新手,都会认为是前者。 但是,经过代码实验,这里指的是被导入的模块中的语句只执行一次。 假如现在有main.py和foo.py两个文件, foo.py中内容如下: def bar(): print('bar') print('hello') main.py中内容如下: from foo import bar import foo bar() foo.bar() 执行python main.py后的结果是: hello bar bar
作者回复: 好建议,这里确实没想到读者会有误解。
2019-12-30416 - 萧潇风export PYTHONPATH="/home/ubuntu/workspace/your_projects" 在windows系统 中 亲测无效 T_T
作者回复: windows 的文件系统和 Linux 不太相同,学计算机科学还是尽早切换到 linux 系统吧
2019-06-0729 - Paul Shan思考题 两者的前缀不同。第一种,把目录下的文件都倒入了,每个文件有各自前缀。第二种,只是倒入了一个前缀,所有文件都通过这个相同前缀。第一种类似于拷贝一个目录下所有文件。第二种类似于拷贝整个目录。
作者回复: 👍
2019-11-156 - enjoylearning作者写的都是原来疑惑的地方,如有时候要新建一个模块总是纠结于是添加文件夹还是包,怀疑加文件夹是不是不如加包规范,有时面对每个文件夹一个空的__init__.py,觉得真是不够优雅,现在好了,原来是2和3的区别,以后可以大胆的用文件夹来组织模块了。另外就是觉得python 命名模块名不能像java和.net那样以公司名.application.web.api格式,觉得还是有点别扭。
作者回复: 哈哈对,除非是老项目维护,新项目最好使用 python 3 来构建,确定好规范后就可以大胆 coding,不用太担心兼容性问题。
2019-06-086 - 小侠龙旋风在pycharm里,我会使用“Mark Directory as -> Sources Root”来设置当前文件夹为根目录。 思考题: 1.from module_name import * 能够导入模块下所有的类/函数等内容,使用时不需要包含模块名。容易出现重名现象,发生错误; 2.import module_name 只是将模块名导入,调用时必须模块名.xxx。 3.from module_name import class_name 需要用模块中的哪个类就导入哪个类,比较推荐。
作者回复: 👍
2019-06-083 - Kevin“import 在导入文件的时候,会自动把所有暴露在外面的代码全都执行一遍。因此,如果你要把一个东西封装成模块,又想让它可以执行的话,你必须将要执行的代码放在 if __name__ == '__main__'下面。” 导入的模块if __name__ == '__main__'下面的语句没有被执行。
作者回复: 抱歉这里的意思让你造成误解。这里想表达的是: 如果你要把一个东西封装成模块,又想让它`单独`可以被执行的话,你必须将要执行的代码放在 if __name__ == '__main__'下面。
2020-06-222 - Paul Shan树状结构是大多数项目的组织方式,树状结构本身不复杂,从根节点到每个节点有唯一路径,这条路径可以用一致的方式来引用文件。树状结构可以表达的文件上限是层数的指数,对于大型项目也没问题。如果目录是线性结构,文件一多,查找就费力。文件直接的调用如果用相对路径,这就相当于在树状的结构中引入了中间节点的边,几乎让树成图,复杂度大大增加。
作者回复: 👍
2019-11-152 - 大象请教老师一个问题:如果我们所有的项目(项目A,项目B,项目C)都在一个文件夹底下,每个项目都有自己的虚拟运行环境。如果我项目A是公共库,项目B要引用项目A,那么我需要怎么做?谢谢
作者回复: 正常 import,但是 B 的 requirements.txt 可能要包含 A 正常运行必须的包。另一个建议来自 Google 的开源源代码管理工具 bazel,可以尝试。
2019-10-252 - Geek_59f23eclass_utils.py那儿应该是reversed吧,而不是reverse。
作者回复: 多谢,是 reversed.
2019-06-082