码迷,mamicode.com
首页 > 其他好文 > 详细

第十三章 模块和包

时间:2018-06-07 20:53:55      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:外部   alt   执行   mon   文件   fine   结果   开始   width   

1.模块                                                      

1.模块就是import可以导入直接使用的py文件

一个模块如果执行多次import是什么效果:只执行一次

凡是导入一个模块就相当于执行了这个文件,当你导入一个模块就可以使用模块中的名字

mymodule.py
print(执行了mymodule)

import mymodule
# 执行了mymodule

当你导入了一个模块那么在导入这个模块所处的命名空间中,就有了一个名字,指向属于自己的空间,模块中的代码从上至下依次执行,可以通过模块访问模块中的名字,不能脱离模块引用模块中的名字

mymodule.py
print(执行了mymodule)
money = 1000

def func():
    print(My moneny is %s % money)

import mymodule
mymodule.func()

# 执行了mymodule
# My moneny is 1000

func()
#     func()
# NameError: name ‘func‘ is not defined

当模块和当前文件中都有相同的名字,模块中的方法引用模块中的名字

mymodule.py
print(执行了mymodule)
money = 1000

def func():
    print(My moneny is %s % money)

import mymodule

money = 2000
mymodule.func()

# 执行了mymodule
# My moneny is 1000
# 说明:模块并没有导入执行文件,所以模块中的方法引用不到执行文件中的名字

2.import .. as ..使用别名

mymodule.py
print(执行了mymodule)
money = 1000

def func():
    print(My moneny is %s % money)

import mymodule as mm
mm.func() # --> 使用别名

# 执行了mymodule
# My moneny is 1000

3.import..from

mymodule.py
print(执行了mymodule)
money = 1000

def func():
    print(My moneny is %s % money)

from mymodule import func
func()
def func():
    print(123)
func()
# 执行了mymodule
# My moneny is 1000
# 123

# 说明:因为导入mymodule中的func,所以第一个func(),为mymodule中的方法,输出结果为‘My moneny is 1000‘
# 而第二个func()是因为程序中重新定义了func,所以直接执行程序中的func()函数
# 即使程序使用from..import的形式,也会在内存里开辟相应的命名空间,将模块中的所有名字存在内存里
# 所有这样也不会减少使用内存,只不过引用是不可视的

4.import..from..as..使用别名

mymodule.py
print(执行了mymodule)
money = 1000

def func():
    print(My moneny is %s % money)

from mymodule import func as f, money as m
f()
print(m)

# 执行了mymodule
# My moneny is 1000
# 1000

5.import和from..import的区别与联系

import
import一个模块 就相当于执行了这个模块
那么在全局,就有了一个模块名字,指向属于自己的空间
空间里存储了所有文件中的名字
起别名import ... as ...

from import
仍然会执行整个文件
文件中的名字会被存储在一块独立的内存空间
import后面的名字会出现在全局,相当于对独立命名空间中的一个引用
from import 也支持as语句 也支持 导入多个名字
from import * 相当于导入所有名字,*和被导入模块__all__是互相影响的

6.模块的导入顺序

导入模块要放到文件开始

内置模块 -- 扩展模块 -- 自定义模块

2.包                                                        

1.包是什么

包就是一个由一组py文件组成而且包含一个__init__.py文件的文件夹

__init__.py文件的作用

2.从包中导入一个模块,可以使用.描述文件夹之间的关系

技术分享图片

3.使用import..as..别名的方式导入包中的模块

技术分享图片

4.使用from..import..

技术分享图片

5.在包中导入一个模块要从包名开始精确到一个模块结束

绝对导入 -- 不利于代码迁移

技术分享图片

相对导入 -- 从包的外部导入包的内部的关系,相对导入才生效

                  带有相对导入路径的文件不能直接执行 -- 会报错

技术分享图片

6.__init__.py的作用

导入一个文件相当于执行了这个文件中的代码

但是导入一个包相当于执行这个包中的init文件

import后面的这个名字 永远会出现在全局的名命空间里

技术分享图片

参考:http://www.cnblogs.com/Eva-J/articles/7292109.html

 

第十三章 模块和包

标签:外部   alt   执行   mon   文件   fine   结果   开始   width   

原文地址:https://www.cnblogs.com/gnaix/p/9152273.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!