Python模块的定义

将写好的python模块保存为.py模式的文件。拷贝到sys.path对应的文件目录下,就可以在shell中通过指令导入:

1、import 文件名的方式导入到当前编译环境中实现重复使用。

2、from fibo import fib, fib2

这种方式导入fib,fib2将这两个名字导入到本地符号表。

3、from fibo import*

这种方式会导入除以下划线_开始之外的开头所有名称。在许多情况下,python 开发者不会
用这种工具。因为它会在解释器中引入一些未知的名称集合,有可能隐藏一些你已经定义的
方法。

注意: 为了效率,在每一个解释会话中每个模块只能允许导入一次。因此,如果你修改你
的模块,你必须重启python 解释器。Or 仅仅是一个你想交互测试的模块,你可以用方法
Imp.reload(),eg,import imp; imp.reload(moduleName);


import sys

只有当解释器处于交互模式时候,这两个变量才能被定义。

sys.ps1

#>>> 输入指示符

sys.ps2

#...

sys.ps1 = ’C> ’

#C> print(’Yuck!’)

sys.path.append(’/ufs/guido/lib/python’)

添加python的模块搜索路径


内置函数dir 用来寻找查找模块定义的名称。它返回一个排序后的字符串列表。

dir(fibo)

#['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'a', 'b', 'cheeseshop', 'd', 'f', 'fib', 'parrot']

没有参数dir()会遍历当前你已经定义的模块名称。


定义包及java对应的package需要在文件目录添加一个__init__.py(注意这里init前后是双横线,两个英文符的下划线。)

1、import sound.effects.echo

这种方法加载子模块sound.effects.echo. 必须用全名来引用。

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

2、from sound.effects import echo

这种方式也可以加载模块echo,并且没有包的前缀也可以使用,因此它可以如下应用:

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

3、from sound.effects.echo import echofilter

同时这种方法加载了子模块echo,但是这种方法可以直接调用函数echofilter();

echofilter(input, output, delay=0.7, atten=4)

4、from sound.effects import *

理论上,他预期以某种方式友好地对待文件系统,寻找在包下的所有子模块,并且把它们都导入进来。它可能会花费更多的时间,
导入子模块可能不希望出现的负面影响,这种负面影响仅仅在子模块被明确导入时候才会出现的。

对包作者而来,唯一的解决办法就是提供了一个关于包的准确索引。Import 语句会用如下
的转换。如果一个包的_init_.py 代码定义了一个名为_all_的列表,当使用form package import
* 时它被当做应该被导入的模块名称的列表。当发布包的一个新版本时,应该由包作者负
责这个列表时最新的。如果包作者在包中没有发现导入* 的用法。那么他们可以决定不去做
这些。例如:
Sound/effects/_init_.py 文件有如下代码:
__all__ = ["echo", "surround", "reverse"]
这将意外着from sound.effects. Import * 将会导入在sound 包下三个名为显示的子模块。

如果_all_没有定义, 语句form sound.effects import * 不会从包sound.effects 导入所有子包
到当前的命名空间。它仅仅确保包sound.effects 已经导入。然后导入包中定义的任何名称。

5、包内引用

当包设计成好几个子包时(就像在例子中的sound 包),你可用绝对导入来指定到子模块或
者相应的包。例如,如果模块sound.filters.vocoder 需要用在sound.effects 包中echo 模块,
它可用from sound.effects import echo.

你也可以写用from module import name 形式导入语句写相关导入。这些导入用.. 来描述涉
及到相关导入的当前路径和父包。例如,从surrond 模块导入:
from . import echo
from .. import formats
from ..filters import equalizer
注意:相对导入是以当前模块名称为基础的,因为主模块的名称总是_main_,所以以python
程序中打算用作主模块的模块必须使用绝对导入。




转载from夜深人静的码农



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值