Python——模块

1. 什么是模块

模块就是某个东西的一部分。如果一个东西可以分为几部分,或者你可以很容易地把它分解成多个不同的部分,我们就说这个东西是模块化的。

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

2. 为什么使用模块

为什么要那么麻烦地把程序分解为较小的部分呢?原因有几个:

  • 这样做文件会更小,因而就能更容易地查找代码。
  • 一旦创建模块,这个模块就能在很多程序中使用。这样下一次需要相同的功能时就不必再从头开始了。

3. 如何创建模块

键入:

def c_to_f(celsius):
        faherheit = celsius * 9.0 /5 + 32
        return faherheit

这就创建好一个模块,这个模块中只有一个函数,作用是把摄氏度转化为华氏度,把它保存为my_module.py。

4. 如何使用模块

要使用模块中的某个函数,首先必须告诉Python我们想要使用哪些模块:

import my_module

下面写一个程序来使用我们刚才编写的模块这里我们使用c_co_f( )函数完成温度转换。

前面我们已经知道如何使用函数并向它传递参数。这里唯一不同的是,函数与主程序不在同一个文件中,而在另一个单独的文件中,所以必须使用import。创建一个新的编译器窗口,键入:

import my_module

celsius = float(raw_input("Enter a temperature in Celsius: "))
fahrenheit = c_to_f(celsius)
print "That's ",fahrenheit,"degree Fahrenheit"

保存为 modular.py,然后运行,结果可能是这样的:

Enter a temperature in Celsius: 22

Traceback (most recent call last):
  File "F:\Python文件\111.py", line 4, in <module>
    fahrenheit = c_to_f(celsius)
NameError: name 'c_to_f' is not defined

为什么不能正常运行呢?错误的原因是c_to_f( )没有定义。但是我们前边已经在my_module中定义了这个函数,而且我们去确定已经导入了这个模块。

出现这个问题的原因是,在Python中指定去他模块中定义的函数时必须更加具体,改为:

   fahreheit = my_module.c_to_f(celsius)

运行即可正常工作。

5. 命名空间

什么是命名空间

拿我自己举例子。我们高中学校一共有包括我在内两个人的名字是YMY,但我在高一(3)班,另一个人高一(4)班。假如有人在我们班级讲YMY今天穿的黄色衣服,我们班所有人都会认为在说我;如果想说另一个YMY,就会说:“(4)班的YMY穿的黄色衣服。”或者“另外那个YMY”,或者其他类似说法。

因为我们班只有一个YMY,所以提到这个名字,班级同学就会知道说的哪个人。换一种说法,在我们班这个空间,只有一个名字YMY。我们班就是我的命名空间,在这个命名空间只有一个YMY,所以不会混淆。

现在校长必须通过学校的广播把YMY叫到办公室,他一定不会说:“请YMY到办公室来一趟”。如果这样,两个YMY都会出现在他的办公室。对于使用广播的校长来说,命名空间是整个学校。这证明,学校的每个人都会听到这个名字,而不是一个班的同学。所以他必须指出是哪个YMY,即必须说:“高一(3)班的YMY到办公室来一趟。”

校长还可以用另一个办法找YMY,就是走到我们班门口说:“YMY,请跟我来。”这里就只有一个YMY听到。这种情况下,命名空间只是一个教室,而不是整个学校。

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

6. 标准模块

Python提供了大量标准模块,可以用来完成很多工作,比如查找文件、报时、生成随机数等,称为Python标准库。

为什么这些内容必须放在模块中呢?恩,其实不是非得这样,不过设计Python的人认为这样更高效。通过建立单独的模块,就只需要包含你需要的那些函数。

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

下边介绍几个标准模块:

time

time模块,能过获取计算机时钟的信息,如日期和时间。还可以利用它为程序增加延迟。

time模块中的sleep( )函数可以用来增加一个延迟,里边的参数表示延迟多少秒,具体如何工作如下例:

import time
print "L",
time.sleep(2)
print "S",
time.sleep(2)
print "M"

要注意,调用sleep( )函数时,必须在前边加上time.。这是因为,尽管我们已经导入了time,但并没有让它成为主程序命名空间的一部分,所以要在使用sleep( )函数时,都必须强调time.sleep( )。

如果这样:

import time
sleep(5)

会出现这样的错误:


Traceback (most recent call last):
  File "F:\Python文件\111.py", line 2, in <module>
    sleep(5)
NameError: name 'sleep' is not defined

不过如果这样导入:

from time import sleep

就会告诉Python,“在time模块中寻找名为sleep的变量(或者函数或对象),把它包含在我的命名空间中。”就可以直接使用sleep函数,而不用在前面加上time.了。

from time import sleep
print "Hello,talk to you again in 5 seconds..."
sleep(5)
print "Hi again"

也可以一劳永逸使用 * 表示“全部”,这样就会从模块导入所有可用的名字。

from time import *

使用这个命令必须特别当心。如果我们在程序中创建了一个名字,而它与time模块中的一个名字相同,就会出现冲突。最好还是导入真正需要的部分。

随机数

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

>>> import random
>>> print random.randint(0,100)
84
>>> print random.randint(0,100)
35

每次使用random.randint( )时,会得到一个新的随机整数,当然是介于0~100之间的数。

如果想得到一个随机小数,可以使用random.random( )。不在括号中放任何参数,因为random.random( )总会提供一个介于0到1之间的数:

>>> print random.random()
0.470544754742
>>> print random.random()
0.83671155848

如果想得到一个0到10之间的小数,只需要将结果乘以10:

>>> print random.random() * 10
5.47524865327
>>> print random.random() * 10
9.36458929356

小练习

1.编写一个模块,包含Python——函数中“用大写字母打印名字”函数,然后编写一个程序导入模块中,并调用这个函数。

def printName():
        print "L          SSSS             M           M"
        print "L         S                M M         M M"
        print "L         S               M   M       M   M"
        print "L          SSSSS         M     M     M     M"
        print "L               S       M       M   M       M"
        print "L               S      M         M M         M"
        print "LLLLL      SSSS       M           M           M"
        print
for i in range(5):
        printName()

将这个程序保存为“printLSM.py”,然后新建一个模块:

import printLSM

printLSM.printName()

2.编写一个小程序,生成1到20之间的5个随机整数列表,并打印出来。

import random

for i in range(5):
    print random.randint(0,20)
  

3.编写一个小程序,要求它工作30秒,每三秒打印一个随机小数。

import time,random

for i in range(10):
    time.sleep(3)
    print random.random()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花里梦雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值