敲黑板
1)这是教学的 第6课
2)在专栏里,可以找到之前的课程
3)持续更新,关注不迷路
4)有问必答,不信试试看
回顾:虚拟地球模型初建
通过上一节课,我们知道了用 “拆大象” 的 ,把我们虚拟地球的问题变小、变清晰,然后通过Python的基础变量和类把“虚拟地球”的模型建立了起来。
上一节课的穿越链接:5:Python编程入门,动手做个虚拟地球——让代码繁殖后代
开始上课
在为“虚拟地球”编写“虚拟人物”,并让他们建立组织、谈恋爱、繁殖后代、建立自己的领地等行为之前,我们稍微停顿一下,来了解一个和写代码本身一样重要的领域。项目文件的管理,了解这些知识,你会有如下好处。
1)不仅是项目,生活中你也是个收纳小能手! 2)Get 一个站在巨人肩膀上的技能!并且体验到什么叫无所不能!
我就是不想管理项目文件?
目前我们虚拟地球的项目文件只有1个,但在实际的开发工作中,项目文件可能上千种,上百人在维护。
我们可以看看下面这两张图,你更喜欢在哪一种“环境”下工作?
喜欢左图的小伙伴,务必留言,我有话要和你说
我想大部分人都喜欢整洁舒适的办公环境吧,同样大部分人也喜欢整洁舒适的项目文件。
这个领域不是具体的编程技术,但它们的一些规则和思想无论对于工作还是生活都会有很大的帮助,慢慢感受。
【之一个规则,“尺寸”不要太大,也不要太小】
我们先来看一下,上节课结束,我们代码的样子(word_5文件):
字体太小,建议在电脑上看
我们把10个类代码写在了一个文件里,貌似问题不大,但有经验的软件工程师已经在马不停蹄的拆文件了。
因为这个文件,随着软件开发的深入,内容会越来越多。目前只有88行,可能到了后期会有8000多行,到时候再来拆分文件就有点吃力了。
那我们要怎样拆分才合理呢?
我们先以最常见的手法来拆分,把word_5.py 这个文件里面的代码按照类的定义来拆分,也就是一个类放在一个代码文件里,将其拆解成 10 个不同的文件。
放在 Model 这个目录里,如下图:
我们进入拆分出来的Animal.py 文件里看一看:
字体太小,建议在电脑上看
可以看到 4-12 行是从Word_5 里拆解出来的 Animal 类代码。
之一行代码:
From model.Biology import Biology 是一个Python 的文件导入命令。
简单粗暴精准的理解,就是把Biology.py文件里的 Biology这类代码关联到,Animal.py 里面。(因为Animal(动物)这类继承自Biology(生物)这个类,不这样做Python不认识Biology是什么东西。)
不要小看这行代码,后面大家就会知道,它为程序员打开了一道充满无限力量的大门!
其他文件,比如:Env.py,还有Land.py 的情况和Animal.py一样。这里面有两个细节值得我们琢磨思考!
拆分的依据会是什么?
上面的例子,拆分依据是根据类的定义。
在不同的开发项目里面,程序员还会根据,代码的功能(注册功能、购物功能)、代码的用途(前端,后端)、代码的层级(底层接口、接口实现)等来对大文件进行拆分重构。
但要注意,在拆分的时候,要控制好力度,拆分出来的文件不能 “太大”,“也不能太小”。否则物极必反!
拆分文件的命名规则是什么?:
拆分文件的名字,更好和文件里的内容高度保持一致。在以类为拆分依据时,拆分出来的名称和类名保持一致,这不是强制规定,但有助于项目文件的阅读和整理。
你也可以文件名叫做 “PrettyGirl.py” 里面却是 “斐波那契数列模的代码”,相信我,工作中千万不要这样做!
【第二个 把相同的东西放在一起,方便,好找】
随着软件开发不断深入,会有新的代码文件产生,然后就会有新的代码拆解,代码文件会越变越多,如果你是一个强迫症患者,就难为你了。
有经验的程序员会把这些拆分出来的文件整整齐齐的归类,就像有些精致的孩子,会把房间打整的整整齐齐。
房间整齐了,东西也好找了,项目代码整齐了,BUG也好调试了。
根据上面的思路,按照代码的层级,我们把拆解出来的10个文件又收纳了一遍。看下图:
这样稍微整理一下,是不是就舒服、清晰了一些?大家能看出来整理的思路嘛?(如果不是的话,请留言给我,我有话要和你说)
在你享受整理文件带来的治愈感时,请注意,这里有个小陷阱!
若我们要在Pycharm里面整理项文件,在Project这个窗口下面,拖拖拽拽,新建目录、删除目录就可以了。是不是美滋滋?
在这个过程中会遇到下面的提示:
意思是,文件位置改变了,要不要更新代码里import 或 from 的引用位置? 这里只要点 Refactor(重构)按钮即可。
这些操作是不是也可以在 windows 的文件管理里面操作?
答案是可以的,但不建议这样操作,因为在 windows 文件管理拖拖拽拽代码文件,代码文件里的import 或 from 的引用位置,是不会自动更新的,这样会导致我们程序出错,甚至会出现一些隐藏很深的 BUG。
【第三个 这两个句式,让 Python 工程师很自信】
Import...... From xxxx.xxxx import xxxxxxxx.......
在古时候如果有Python的话,上面这两行代码一定是一个充满魔力的咒语。
上面这两种句式,都是使用 Python 开发出各种各样有趣又有用程序的基石。
毫不夸张的说掌握了这两种句式,你就拥有四两拨千斤,两三行代码敲出一个应用程序的能力!
Import 与 From ..... 这两种从文件外部导入资源(文件、包、插件等统称资源)的命令目的一样,但细节会不同,总结如下:
Import:
1) 大刀阔斧的导入整个模块(模块就是 .py 的代码文件 )
2) 会自动检索导入的模块存不存在。import会去 sys.path 这个列表里寻找文件的线索 ,如何查看这个列表变量里有没有你需要的模块路径? 看下面的代码。
3) 可以多次导入同一个模块,但Python实际只会导入一次。
4) 相互导入会引发程序错误,比如我导入你,你又导入我,那到底是谁导入谁?
5) 需要注意的是,如果自己写的 .py 模块无法用import导入,这可能是因为项目文件结构的问题。
遇到这样的情况,需要把导入的模块用 sys.path.append(“模块地址”),加入到sys.path 列表里。这样 import 就可以找到它了。
From....
1) 像手术刀一样细致,可以导入整个模块,也可以导入模块里的一个变量,如下面的代码:
2) 它不会像 import 一样自动寻找模块的位置,它需要你给它指明一个明确位置
3) 从语义上来说,它要比 import 更有可读性。
【好了,如何站在巨人肩膀上?】
为什么说掌握了 import ,和 from .... 这两种导入模块(py文件)的命令就打开了一道通往无限可能的大门呢?
因为你学会了站在巨人的肩膀上!
现在软件开发的模式和过去10年有一些不一样了,过去10年程序员专注的是如何实现一个具体的算法从而来解决问题。
现在程序员解决问题的时,有大把现成的模块、插件、包、框架等等可以选择!
我觉得这件事情用嘴说不够震撼,现在我们就来看几个例子吧!
例子1:让你的Python拥有画画的能力!
导入 turtle 库,你就是一个会用代码画画的浪漫艺术家!敲入下面代码,然后运行,看看你会画个什么出来?
字太小,建议收藏用电脑看
例子2:5行代码让你的Python说人话!
在让python 说话之前,我们先来给Python安装能说话的第三方库。在Pycharm里打开Terminal(其实就是CMD),如下图:
字太小,建议收藏用电脑看
然后敲入pip命令,让Python安装 “说话” 插件。
字太小,建议收藏用电脑看
这行命令的意思是,让Python 通过 pip 命令安装 pyttsx3 和 pywin32 这两个库。
关于pip的使用 ,后续课程会专门为大家详细说明。
待安装好后,敲入下面的代码,然后运行!(运行前把电脑声音开大点!)
字太小,建议收藏用电脑看
例子3:让Python 变成无情的炒股机器!的之一步!
和例子2一样,首先需要给自己的Python安装一个包,命令如下:
然后敲入下面代码,运行一下试试看:
上面3个例子的代码加起来还没超过100行,但Python已经让你拥有了,用代码绘画、说话、查询行情的能力了。
如果你已经掌握了上面的知识,那么项目文件的管理算是入门了。也更敢想象了!
甚至你会发现,你的房间,你的电脑桌面,你的工位,你工位上的咖啡杯都变得井井有条了,整个人的颜值,都提高了(变自信了)!
软件开发的项目文件的管理就这么简单?
当然不是!
上面的内容只是软件开发项目文件管理的冰山一角,在上规模的软件开发团队,团队内部会集中或分布式的管理项目代码。除了上面最基础的知识外,还有SVN、GIT这两大版本控制工具的使用,以及持续集成、持续发布等。
这个领域在一些大的软件开发团队里,专门会有小组来处理这些事务,为这些事物开发相关的工具。
这方面的知识,我会出系列文章。所以说,点赞、评论、关注不迷路。
八 下一课
把自己“克隆”到虚拟世界里。
矩阵代码详细Matrix code detailed