Python模块和包

导入模块

import语句

import module1
import module2
.
.
import moduleN
#也可以在一行导入多个模块:
import module1,module2...moduleN #但是这样的代码可读性不如多行的导入语句。而且在性能上与上面没有什么不同,推荐使用上面的格式

推荐所有的模块导入都在代码的开头部分进行,而且最好按照这样的顺序:

  • Python标准库模块
  • Python第三方模块
  • 应用程序自定义模块

from-import语句

可以导入指定的模块属性,也就是把指定名称导入到当前作用域:

from module import name1,name2...nameN

扩展的import语句(as)

有时候导入的模块或模块属性名称已经在你的程序中使用了,或者你不想使用导入的名字,可以使用as关键字对模块或变量进行重命名:

import time as tm
#time.time() 原方法
#tm.timg() 重命名后使用方法

from time import sleep as sp
#sleep() 原方法
#sp() 重命名后使用方法

模块导入的特性

载入时执行模块

加载模块会导致这个模块被“执行”。也就是被导入模块的顶层代码将直接被执行。通常这包括全局变量及类和函数的声明。如果有检查__name__的操作,那么它也会被执行。

导入(import)和加载(load)

一个模块只被加载一次,无论它被导入多少次。这可以阻止多重导入时代码被多次执行。例如你的导入了sys模块,而你要导入的其他5个模块也导入了它,那么每次都加载sys不是明智之举!所以,加载只在第一次导入时发生。

导入到当前名称空间的名称

调用from-import可以把名字导入挡墙的名称空间里去,这意味着你不需要使用属性/句点属性标识来访问模块的标识符。例如,你需要访问模块module中的var名字时这样被导入的:

from module import var
#我们使用单个的var就可以访问它自身。把var导入到名称空间后就再没必要引用模块了。

#也可以把指定模块的所有名称都导入到当前名称空间
from module import *

#在实际工作中应限制使用 from module import * ,因为它会“污染”当前名字空间,而且很可能覆盖当前名称空间中现有的名字。

包是一个有层次的文件目录结构,它定义了一个由模块和子包组成的Python应用程序执行环境。

  • 为平坦的名称空间加入有层次的组织架构;
  • 允许程序员把有联系的模块组合到一起;
  • 允许分发者使用目录结构而不是一大堆混乱的文件;
  • 帮助解决有冲突的模块名称。

与类和模块相同,包也使用句点属性标识来访问他们的元素。使用标准的import和from-import语句导入包中的模块。

目录结构

Phone/    #Phone是最顶层的包
    __init__.py
    common_utll.py
    Voiccedta/    #是Phone的子包
        __init__.py
        pots.py
        Isdn.py
    Fax/
        __init__.py
        G3.py
    Mobile/
        __init__.py
        Analog.py
        Digital.py    
    Pager/
        __init__.py
        Numeric.py 

#我们可以这样导入子包:
import Phone.Mobile.Analog
Phone.Mobile.Analog.dial()

#也可以使用from-import实现不同需求的导入。
from Phone import Mobile #只导入顶层的子包,然后使用属性/点操作符向下引用子包树
Mobile.Analog.dial()

from Phone.Mobile import Analog #引用更多的子包
Analog.dial()

#事实上可以一直沿子包的树状结构导入:
from Phone.Mobile.Analog import dial
dial()

 

转载于:https://my.oschina.net/dongchunlei/blog/1645067

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值