2017年1月22日20:24:06
第一步,当然是先了解Module,所以阅读参考链接当中的Modules。与之前一样,给定的链接是Python 3.5的,自己使用的是2.7的版本,因此将文档切换至2.7版本。
为什么需要使用Modele,两个原因:易维护,可复用。
As your program gets longer, you may want to split it into several files for easier maintenance. You may also want to use a handy function that you’ve written in several programs without copying its definition into each program.
一个Module,在实体上也就是一个.py文件,里面包含有比较通用的函数/变量的定义,所以在逻辑层面上给了它一个专属的名字。
上面这篇文档里面还涉及到Package,不过目前还不深入了解。对于Module的使用,我得先踏出一小步。
分离变量
先创建一个Module,把所有公共的变量包含进去。因为Module涉及到多个文件,为了更好的组织代码,新建一个文件夹来存放它们。
第一步成功了,但不知道为什么每次执行都会生成.pyc文件。在知乎上有不少线索可以参考。
分离函数
如果要让GUI和CLI都共用同一份代码,那么必须要将公共的函数提取出来。这一步可以从核心过程——根据城市查询天气开始进行调整,分如下步骤:
- step 1: 新建CommFunctions.py用来存放公共函数。
- step 2: 将lookup_city_weather进行分离。
- step 3: 测试通过之后,循环step 2 / step 3,直到不能再提取为止。
1.会不会有重复包含的问题?
再新建了CommFunctions.py之后,想到在CommFunctions.py需要import CommVariables,而在WeQuery_GUI当中也会import CommVariables,重复包含之下会不会有问题呢?
担心太多不管用,不如先尝试。
测试步骤: CommFunctions.py中import CommVariables WeQuery_GUI.py中import CommVariables WeQuery_GUI.py中import CommFunctions 测试结果: 无影响。
2.Python当中有出参的概念吗?
我想定义一个get_weather(city, weather)的函数,如果获取失败就返回False,如果成功就将天气写到weather当中。但Python里面是不是默认支持出参呢?
担心太多不管用,还是要尝试。
测试了一下,答案是参数是否可以修改与参数类型有关,对于string, number是不可以修改,而list, dict可以修改,具体参看Python修改函数参数?与Python的函数参数传递:传值?引用?,不过函数可以不需要指定返回值类型,解析器可以自动识别直接返回的布尔类型。
如果上面get_weather(city, weather)就需要更改为get_weather(city)了,通过返回是否为空串来判断查找结果。
上一步完成之后再降build_weather_dictionary()移动到CommFunctions.py当中,直到不能再优化。
困了,就优化到这里吧,先交作业啦。