来玩更大的积木——父与子的编程之旅 学习笔记(13)2018-08-17

第十五章 模块

本章我们继续精简笔记~

15.1~3 什么是模块、为什么使用模块、与函数的区别

(1)模块(module)就是包含在一个更大程序中的一部分代码。

(2)模块的好处有:使文件更小、更易读;需要使用相同功能的时候不用再次从头写;最重要的是,模块化意味着我们可以使用不同的组合来完成不同的任务。

(3)模块与函数的区别:

    函数就像一块块积木,模块就像一个个积木桶。

15.4 如何创建模块

创建模块非常简单,如下面这个例子,将这个文件命名为“my_module.py”并保存:

这样就创建好了my_module这个模块了!

小结:要创建一个模块,只需保存好相应的py文件。

15.5 如何使用模块

我们在同一文件夹的另一个程序中使用my_module:

(1)首先,我们使用import关键词告诉Python要使用的模块名:

my_module是外部文件,所以需要import

(2)运行后却发现报错,程序不能识别c_to_f方法:

但我们的确定义了这方法,并且import了呀?

(3)怎么办?这是因为我们定义函数的时候,需要更加准确。解决方法之一是将上面报错的代码,改为:

fahrenheit = my_module.c_to_f(celsius)

这样便能正常工作了。

15.6 命名空间

(1)什么是命名空间?

我们先看一个例子:假如第一中学的一年1班有个人叫张三,2班也有个人叫张三。我们在1班,当我们说“我们班的张三”的时候,知道指的不是2班的那个人;如果我们想说另一个人,就会表述为“2班的那个张三”。换种说法,在1班的这个空间里,只有一个张三(1号),所以1班就是张三(1号)的命名空间;同理,2班是张三(2号)的命名空间。

所以,当一中的校长要叫张三同学时,ta不能直呼其名,而必须加上命名空间的前缀,如“一班的张三”;或者ta也可以来到命名空间(1班)里,直接叫张三出来,这样就不存在混淆。

一般来说,程序员会把较小的命名空间(如一间教室)叫做局部命名空间;将较大的命名空间(如整间学校)叫做全局命名空间

(2)如何导入命名空间?

我们再看第二个例子:一中没有人叫李四,但这校长偏要找一个叫“李四”的人过来。这时,二中由于有交流活动,一年一班的同学合并进来,里面恰好有个人叫李四,这时候校长便可找到李四了。

二中的一年一班就像另一个命名空间,导入了模块,就相当于导入了命名空间,里面所有的变量、函数及对象,都可以被访问了。

用Python来理解上述行为是这样的:

1.    首先导入二中一班的模块,顺便把命名空间也导入:import ErzhongYinianyiban

2.    执行校长呼叫程序:call_to_office(ErzhongYinianyiban.Lisi)

(3)用from导入命名空间

另外,我们还有一种方法,成为“校长亲自到班级叫同学的方法”,或者简单记为from方法,例子如下:

from ErzhongYinianyiban import Lisi

⬆️感觉挺像自然语言的。要是想叫上全部的学生,可以用*代替李四的位置:

from ErzhongYinianyiban import *

但用星号时要注意,假如二中一班跟一中有学生同名,那就麻烦啦。

目前为止,命名空间这一块我们理解就好了,比较深入的知识还待日后掌握~

15.7 标准模块

学到这里,还有个重大的好消息——Python提供了许多标准模块,它们组合成了标准库。有些标准模块是预装好的,有些开源的模块需要自己下载。下面我们来学习几个标准模块:

(1)time

time模块可以获取计算机的时钟信息,里面的sleep方法可以为程序增加延迟,如:

sleep前的函数要加上time.,否则命名空间不对

或者我们可以使用from方法:

这时候不需要在sleep前加time.

(2)随机数

random模块用于生成随机数,在游戏和仿真中非常有用。下面在交互模式中使用random模块:

注意randint方法前的命名空间,刚刚没注意,报错了

注意到上面是产生整数,我们可以使用random.random()方法产生0~1的小数。如果我们需要0~10或0~100的随机小数,可以在后面乘以相应的倍数:


你学到了什么?

(1)什么是模块、如何创建模块和在另一程序中使用模块

(2)什么是命名空间、局部和全局命名空间

(3)如何把其他模块的变量包含到自己的命名空间中


练习题

(1)编写一个模块,包含把十三章的“大写字母打印名字”函数,然后导入模块并调用函数。

异常简单~注意文件夹位置和命名就行了

(2)编写一个小程序,让c_to_f导入到主程序的命名空间里,从而可以写

fahrenheit = c_to_f(celsius),而不用写

fahrenheit = my_module.c_to_f(celsius):

解答:要导入函数到主程序的命名空间里,可以使用from的两种方法:

1️⃣from my_module import c_to_f

2️⃣from my_module import *

(3)编写一个小程序,隔三秒钟生成1到10之间的10个随机小数列表,并打印出来:

程序代码
运行结果

小结

经过函数、对象等大boss的“洗礼”,这一章显得简单许多,不过难关还在后头,毕竟模块更多的作用是将前面的大boss打包好,这一章只是学习模块的一些特性。继续加油吧~

你可能感兴趣的:(来玩更大的积木——父与子的编程之旅 学习笔记(13)2018-08-17)