Python系列12——模块

目录

一、模块的路径

二、模块和包

1、模块(Module)就是包bai含代码的文件,不一定是Python代码,有四种du代码类型的模块:

2、包(Package)就是包含模块文件的目录,目录名称就是包名称,目录中可以包含目录,子目录也是包,但包名称应该包含上一级目录的名称。Python引入了按目录来组织模块是为了避免模块名冲突,不同包中的模块名可以相同。


一、模块的路径

# 通过import sys
# sys.path可以得到python模块的搜索路径

>>> import sys
>>> sys.path
['', 'D:\\Program Files\\Python\\Lib\\idlelib', 
'D:\\Program Files\\Python\\python37.zip', 
'D:\\Program Files\\Python\\DLLs', 
'D:\\Program Files\\Python\\lib', 
'D:\\Program Files\\Python', 
'D:\\Program Files\\Python\\lib\\site-packages']

# 第一个空字符串,表示当前搜索路径
# 通过import os , os.getcwd()可以得到
>>> import os
>>> os.getcwd()
'D:\\Program Files\\Python'

# 自己编写一个模块,命名为module1,并保存在C:\Users\ilgfc\Desktop
def my_print():
    print("北京欢迎你")

# 由sys.path可以知道,python不能搜索到定义的module1包
# 因此需要添加该搜索路径到python,添加方式为sys.path.append('要添加的路径')
>>> sys.path.append('C:/Users/ilgfc/Desktop')
>>> import module1
>>> module1.my_print()
北京欢迎你



# 除了上面的方法之外,还有 两种方法
# 第一,可以通过在任意搜索路径下新建pth文件,pth文件的内容为被添加模块所在路径
# 第二,在系统的环境变量设置中新添加PYTHONHOME环境变量,将被添加的模块路径追加到PYTHONHOME的
# 值中
# 这两种方法能够永久的改变模块的搜索路径

二、模块和包

1、模块(Module)就是包bai含代码的文件,不一定是Python代码,有四种du代码类型的模块:

使用zhiPython写的程序( .py文件)

•C或C++扩展(已编译为共享dao库或DLL文件)

•包(包含多个模块)

•内建模块(使用C编写并已链接到Python解释器内)

使用模块可以提高代码的可维护性和重复使用,还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,所以编写自己的模块时,不必考虑名字会与其他模块冲突,但要注意尽量不要与内置函数名字冲突。

2、包(Package)就是包含模块文件的目录,目录名称就是包名称,目录中可以包含目录,子目录也是包,但包名称应该包含上一级目录的名称。Python引入了按目录来组织模块是为了避免模块名冲突,不同包中的模块名可以相同。

/*
为声音文件和声音数据的统一处理,设计一个模块集合(一个“包”)。
由于存在很多不同的声音文件格式(通常由它们的扩展名来识别,例如:.wav, .aiff, .au),
因此为了不同文件格式间的转换,你可能需要创建和维护一个不断增长的模块集合。 
你可能还想对声音数据还做很多不同的处理(例如,混声,添加回声,使用均衡器功能,
创造人工立体声效果), 因此为了实现这些处理,你将另外写一个无穷尽的模块流。
这是你的包的可能结构(以分层文件系统的形式表示):
*/

sound/                          Top-level package
      __init__.py               Initialize the sound package
      formats/                  Subpackage for file format conversions
              __init__.py
              wavread.py
              wavwrite.py
              aiffread.py
              aiffwrite.py
              auread.py
              auwrite.py
              ...
      effects/                  Subpackage for sound effects
              __init__.py
              echo.py
              surround.py
              reverse.py
              ...
      filters/                  Subpackage for filters
              __init__.py
              equalizer.py
              vocoder.py
              karaoke.py
              ...

包的用户可以从包中导入单个模块,例如:
import sound.effects.echo
这会加载子模块 sound.effects.echo 。但引用它时必须使用它的全名。
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)

导入子模块的另一种方法是:
from sound.effects import echo
这也会加载子模块 echo ,并使其在没有包前缀的情况下可用,因此可以按如下方式使用:
echo.echofilter(input, output, delay=0.7, atten=4)

另一种形式是直接导入所需的函数或变量:
from sound.effects.echo import echofilter
同样,这也会加载子模块 echo,但这会使其函数 echofilter() 直接可用:
echofilter(input, output, delay=0.7, atten=4)

请注意,当使用 from package import item 时,item可以是包的子模块(或子包),
也可以是包中定义的其他名称,如函数,类或变量。 
import 语句首先测试是否在包中定义了item;如果没有,它假定它是一个模块并尝试加载它。
如果找不到它,则引发 ImportError 异常。

相反,当使用 import item.subitem.subsubitem 这样的语法时,
除了最后一项之外的每一项都必须是一个包;
最后一项可以是模块或包,但不能是前一项中定义的类或函数或变量。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值