~欢迎进来我的博客~蛋叔的小乖乖~

父与子的编程---模块

本章总结:

什么是模块

如何创建模块

如何使用模块

命名空间

导入命名空间:import、from

标准模块:time、sleep()函数

随机数:整数、小数

 

 

 

在 Python 中,模块(module)是包 含在一个更大程序中的类似的部分。每个 模块或部分都是硬盘上的一个单独的文件。可 以把一个大程序分解为多个模块或文件。或者也可以反过来,从一个小的模块开始, 逐渐增加其他部分来建立一个大程序。

为什么使用模块

这样做文件会更小,因而就能更容易地查找代码

一旦创建模块,这个模块就能在很多程序中使用。这样下一次需要相同的功能时就不必再从头开始了

并不是所有模块都要使用。模块化意味着你可以使用各部分的不同组合来完成不同的任务,就像利用同样的一组乐高积木可以搭建不同的东西一样。

如何创建模块

模块就是一个Python文件,在一个IDLE编辑器窗口中键入代码,把它保存为test.py文件,例如:

# this is the file "my_module.py"

# we're going to use it in another program

def c_to_f(celsius):   

  fahrenheit = celsius * 9.0 / 5 + 32   

  return fahrenheit

如何使用模块

要使用模块中的某个函数,首先必须告诉Python我们想要使用哪些模块。在程序中包含其他模块的Python关键字是 import。可以这样使用:

impot  test.py------->包含c_to_f()函数

celsius = float(raw_input ("Enter a temperature in Celsius: "))

fahrenheit = c_to_f(celsius)

print "That's ", fahrenheit, " degrees Fahrenheit"

保存为test2.py,必须和test.py保存到同一个路径下运行。

运行后会报错:错误消息指出函数 c_to_f()没有定义。。不过我 们很清楚前面已经在 my_module中定义了这个函数,而且我们确实已经导入了这个模块。

出现这个问题的原因是,在python中指定在其它模块中定义函数时必须更加具体。解决这个问题的一种方法是把这一行代码fahrenheit = c_to_f(celsius)改为:

fahrenheit = test.c_to_f(celsius)

命名空间

在一定的范围内命名,这个范围称为命名空间,比如,一个班级里命名,或一个学校里命名

一般来讲,程序员把较小的命名空间(比如你的教室)称作局部命名空间,而 较大的命名空间(如整个学校)称为全局命名空间

导入命名空间

导入命名空间的理解举例:下面假设你们学校(John Young学校)根 本没有一个名叫Fred的人。如果校长通过广 播系统想找Fred,她肯定找不到这个人。现 在假设与你们学校同在一条街上的另一个学校 (Stephen Leacock学校)正在进行部分校舍维修, 这个学校把一个班级临时搬到你们学校的活动 房里上课。在这个班里,恰好有一个学生名叫 Fred。不过这个活动房还没有连上广播系统。如 果校长找Fred,肯定还是找不到。但是,如果 她把这个新的活动房连入广播系统,然后再找 Fred,就会找到Stephen Leacock学校的Fred。

 

 这 在 Python 中 就 像 导 入 一 个 模 块。 导入了模块,就可以访问这个模块中的所有名字,包括所有变量、函数以及对象。

导入模块的含义与导入一个命名空间是一样的。导入模块时,就导入了命名空间。

导入命名空间(模块)有两种方法:

import StephenLeacock

call_to_office(StephenLeacock.Fred)

如果校长想找到Fred,除了名字(Fred)外,她还必须给出命名空间(Stephen Leacock)。在前面的温度转换程序中就是这样做的。
为了让这个程序正常工作,我们写了这样一行代码:

fahrenheit = my_module.c_to_f(celsius)

这里指定了命名空间(my_module)以及函数名(c_to_f)

用from导入

导入命名空间的另一种方法是:

from StephenLeacock import Fred------>会把 StephenLeacock 的名字 Fred 包含到她的命名空间中(只是从 StephenLeacock把名字 Fred导入她的局部命名空 间中)

call_to_office(Fred)----->就可以这样找到 Fred

如果她想导入所有人,可以这样做: from StephenLeacock import *

星号(*)表示全部.。不过她必须当心,如果 Stephen Leacock 学校与 John Young 学校有同名的学生,就会出现混乱了。

标准模块:

Python 提供了大量标准模块,可以用来完成很多工作,比如查找文件、报时 (或计时)、生成随机数,以及很多其他功能。有时,人们说 Python“配有电池”,指 的就是 Python 的所有标准模块。这称为 Python 标准库。

为什么这些内容必须放在单独的模块中呢?

这样会更高效。否则,每个 Python 程序都必须包含所有可能用到的 函数。通过建立单独的模块,就只需包含你真正需要的那些函数。

有些内容(如 print、for 和 if-else)是 Python 的基本命令,所以这 些基本命令不需要一个单独的模块,它们都在 Python 的主要部分中。

下面来看几个标准模块:

time:

利用 time 模块,能够获取你的计算机时钟的信息,如 日期和时间。还可以利用它为程序增加延迟。(有时计算机动 作太快,你必须让它慢下来。)

time 模块中的 sleep() 函数:增加一个延 迟。可以告诉它你要它睡多长时间(多少秒)

调用sleep()函数时,必须前面加上.time

这样导入也是可以的:from time import sleep

把它包含到我们的命名空间中,就可以直接使用,不需要加time.

不知道需要模块中的哪些名字,就可以使用星号(*)把所有名 字都导入到我们的命名空间里:

from time import *

*表示“全部”,这样就会从模块导入所有可用的名字。使用这个命令必须特别 当心。如果在我们的程序中创建了一个名字,而它与 time模块中的一个名字相同, 就会出现冲突。用 *导入所有名字不是最佳做法,最好只导入你真正需要的部分。

随机数

random模块用于生成随机数。这在游戏和仿真中非常有用。

下面试着在交互模式中使用 random模块:

>>> import random

>>> print random.randint(0, 100)

4

>>> print random.randint(0, 100)

72

随机小数:random.random(),括号里不用写数,总会给一个0-1的小数

其他范围内的一个随机数,比如:比如0-10之间,就可以*10

print(random.random()*10)

 

posted @ 2019-12-23 23:53  qq的天马行空  阅读(115)  评论(0)    收藏  举报
蛋叔的小乖乖