解读The Python Tutorial(六)

模块

如果从Python解释器退出并再次输入,您所做的定义(函数和变量)将丢失。
一个.py文件就是一个模块,模块名就是没有后缀的文件名。全局变量__name__保存的是当前模块的名称。最顶层的主模块__name__ 是 __main__。

通过import可以把其他模块定义的东西引入到当前模块下使用:
modulename.functionname(),也可以分配一个当前模块下的名字,如: name= modulename.functionname(),然后直接调用name。

模块搜索顺序:
1,先从built-in module 找
2,再从sys.path找
sys.path包含input script所在目录及安装时的一些默认路径及PYTHONPATH 类似java的环境变量path。


>>> import sys
>>> sys.path
['C:\\Users\\lenovo\\Desktop', 'F:\\Program Files\\Python36\\python36.zip', 'F:\\Program Files\\Python36\\DLLs', 'F:\\Program Files\\Python36\\lib', 'F:\\Program Files\\Python36', 'F:\\Program Files\\Python36\\lib\\site-packages']
>>> sys.path.append('C:\\Users') #增加路径
>>> sys.path
['C:\\Users\\lenovo\\Desktop', 'F:\\Program Files\\Python36\\python36.zip', 'F:\\Program Files\\Python36\\DLLs', 'F:\\Program Files\\Python36\\lib', 'F:\\Program Files\\Python36', 'F:\\Program Files\\Python36\\lib\\site-packages', 'C:\\Users']
>>> 

模块加载速度
为了加快加载模块的速度,Python在__pycache__目录下缓存每个模块编译好的版本,名字为module.version.pyc。读取.pyc文件的程序不比读取.py文件的程序运行得更快,.pyc文件唯一快的地方在于它们加载的速度。

dir()
用于列出模块定义了哪些variables, modules, functions, etc。
不带参数的dir()列出当前模块的(不包含内置模块)。

>>> import fibo
>>> dir(fibo)
['__name__', 'fib', 'fib2']

Packages

sound/                          #主文件夹
      __init__.py               #初始化主文件夹,此文件可以是空内容,主要表明sound是个package
      formats/                  #子文件夹
              __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
              ...

如下导入的模块echo(没有py后缀),调用模块中的函数必须用全称

import sound.effects.echo
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)

如下导入的echo模块,调用时则只要简称

from sound.effects import echo
echo.echofilter(input, output, delay=0.7, atten=4)

如下只导入了echo的echofilter函数,可以直接调用,但需要注意原模块会不会有同名函数被覆盖。

from sound.effects.echo import echofilter
echofilter(input, output, delay=0.7, atten=4)

模块可以,但函数不能这样导入。
import sound.effects.echo. echofilter

关于import *
import是用来导入模块的,所以import后面一般接模块名。但也可以接package,这时并不会导入package里面的模块,而仅仅是执行package下的__init__.py。通常__init__.py的内容就是import该包内的一些模块,从而间接import包内许多模块。

from sound.effects import * 导入子包effects包 下所有模块,但不建议import *,效率低。并且如果子包的__init__.py中有代码 __all__ = [“echo”, “surround”, “reverse”]则import *只会引入这三个模块,而不是所有模块。

相对路径
以上说的是绝对路径,而相对路径通过一个点是一个父亲。如果sound也只是一个子包, surround是当前模块,那么:

from . import echo
from .. import formats
from ..filters import equalizer  #只两个点

如果当前模块是__main__(顶层包)只能用绝对路径导入。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值