模块(2)

 

 

 

1.1 模块的概念

在Python中,每一个以py结尾的python源文件都是一个模块。

文件名就是模块的名称。文件名同样也是一个标识符,需要符合标识符的命名规则。

模块就好比工具包。模块中定义的全局变量、函数、类 都是提供给外界使用的工具。

在其他位置想要使用模块这个工具包中的工具,就需要先导入这个模块。

 

1.2 模块的导入方式

 

导入方式一:import导入

import numpy

import numpy, matplotlib          #虽然可以一次性导入多个模块,但是不要这么做。

 

导入之后,就可以通过模块名,使用模块提供的工具(全局变量、函数、类)了。【例1】

 

如果模块名字太长,可以使用as指定别名。

import numpy as np

 

 

 

例1:

# my_模块1.py、my_模块2.py

 

#test.py

 

结果:

 

导入方式二:from ... import 

如果希望 从某一个模块中导入部分工具,就可以使用 from ... import 的方式

这样做的好处就是,使用的时候不需要通过模块名.的方式使用工具,而是可以直接使用工具了。【例1】

 

如果从不同模块导入了相同的函数,那么后导入的模块就会覆盖 先导入的模块。如果就希望两个同名函数都是用,怎么办?可以使用不同的别名。【例2】

 

 

 

 

 

例1:

# my_模块1.py、my_模块2.py

 

#test.py

 

结果:

 

 

例2:

# my_模块1.py、my_模块2.py

 

#test.py

 

结果:

 

 

 

导入方式三:from ... import *  

这种方式即可以把模块的所有的工具导入,又可以在使用的使用的时候不加模块名。

听起来很好,但是千万不要用。因为如果多个模块又相同的工具(全局变量、函数、类),又没有文件名,用的时候都不知道用的那个。排错相当麻烦。

 

 

1.3 模块的搜索顺序【科普】

Python的解释器在导入模块时,是怎么找模块文件的?

首先找当前目录,如果没有再找系统目录。

 

所以,在开发的时候,编写的模块文件名不要跟 系统的模块文件名重复。比如在当前目录下编写一个叫random.py的文件,那么系统的random模块可能就用不了了。【例1】

 

可以使用模块的内置属性__file__来查看模块的完整路径。【例1】

 

例1:

(1)正常使用random模块:

 

结果:

 

可以看到random被导入了。

 

 

(2)在test.py的当前目录下编写random.py的文件。

 

test.py

 

执行之后,发现random无法使用:

 

我们通过random的__file__属性来看一下random模块的路径。

 

 

结果:

说明首先看的是当前目录下的random.py文件。

 

 

 

1.4 开发原则——每一个文件都应该是可以被导入的。

下面介绍一个开发原则:

       我们开发的每一个Python文件都应该是可以被导入的。

 

我们知道,每一个Python文件就是一个模块。这个模块应该是可以被导入的,这样别人就可以使用了。

但是存在一个问题,就是在导入文件的时候,文件中所有没有任何缩进的代码(可以执行的代码),都会被执行一遍。【例1】

这些可以执行的代码,并不想作为工具提供给别人。但是呢,又不能不写,因为我们开发的函数、类总要测试吧。我们希望:当执行这个模块文件代码时,能执行这些代码;当作为模块给别人使用时,不执行这些代码。

 

我们可以借助内置属性__name__来解决这个问题。

 

__name__这个属性,保存的是一个字符串。如果执行当前文件,这个字符串是"__main__";如果这个文件作为模块被执行,这个字符串就是模块名。【例2】

利用这个性质,我们可以在模块文件根据__name__的值进行判断,使得执行模块代码和执行调用模块的代码,运行不同的结果。【例3】

 

因此为了让测试代码只在测试本模块的时候运行,在导入后不运行,通常把这些代码放到if __name__="__main__"里写。

 

 

这样写,即可以测试的时候执行。又能保证导入的时候不执行。

 

 

 

例1:

编写模块:my_模块.py

 

编写测试文件:test.py,内容什么也不写

 

 

执行test.py:

 

test.py中只是导入了模块,没有做认识事。但是还是输出了两条语句,这是我们不希望的。原因就是,我们在导入模块的时候,会把模块中的代码执行一遍。

 

 

例2:

 

如果执行my_模块.py,结果为:

 

如果执行test.py,结果为:

 

 

 

例3:

 

如果执行my_模块文件,因为此时__name__保存的是"__main__",所以会调用fun()

 

如果执行test.py,因为__name__保存的是模块名:"my_模块",所以为调用fun1()

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值