美文网首页
来玩更大的积木——父与子的编程之旅 学习笔记(13)2018-0

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

作者: HelloFloria | 来源:发表于2018-08-21 20:31 被阅读0次

    第十五章 模块

    本章我们继续精简笔记~

    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-0

          本文链接:https://www.haomeiwen.com/subject/dxmzbftx.html