模块和包

1.  import

2.  from   inport

3.  模块引用中的情况

4.  包

 import

如何创建一个模块:

创建一个py文件,给他起一个符合变量命名规则的名字,这个名字就是模块。

导入模块的时候发生了什么?   

1.找到模块,判断模块是否被导入过,(import   sys >>>>print(sys.模块名))。

2.如果模块没有被导入,就创建一个属于这个模块的命名空间。

3.让模块名指向这个空间,然后执行该模块中的代码。

导入一个模块就是执行了一个模块

import name
print(name.name)
print(name.read)
name.read()


123456
alex
hello,word

 

import name
bbb="jeav yang"
print(name.bbb)
# print(name.read)
name.read()
print(bbb)




123456
alex
hello,word
jeav yang

 

模块的别名:import  模块名   as   新的模块名   如果给模块起了别名,使用这个模块就能使用的别名的应用了

def func(dic, t='json'):
    if t == 'json':
        import json as aaa
    elif t == 'pickle':
        import pickle as aaa
    return aaa.dumps(dic)

 

导入多个模块:

以os模块为例:import  os .time>>>>>>>import  os  as o,time  as  t

模块的导入顺序:

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

 from import

怎么使用from import:需要从哪个文件中使用那个名字,就把这个名字导入进来

egg:from
my_module import  name

引入from import 的时候,仍然执行了这个被导入的文件,就是import谁,就执行谁

from my_module import read1
read1()


12345
54321
hello world

 

 当前文件命名空间和模块的命名空间问题:

如果被引用的名字在当前文件中,就执行当前文件的名字

from  import 导入的时候发生了什么

1.找到要被导入的模块

2.判断模块是否被导入过

3.若没有被导入就创建一个属于这个模块的命名空间。

4.执行这个文件

5.如果被导入过,找到你要导入的变量,给导入的变量创建一个引用,指向要导入的变量

导入多个名字

 

from my_module import read1,read2
read1()
read2()



12345
54321
hello world
in read1 func alex

 

 

 

给导入的名字起别名:避免导入的名字和当前文件中的名字重复:

from my_module import read1 as r1,read2 as r2
def read1():
    print('in my read1')
r1()
r2()
read1()


12345
54321
hello world
in read1 func alex
in my read1

 

其他操作

from my_module import *   表示执行导入模块的所有内容

 

from my_module import *
name = 'egon'
print(name)   # egon
read1()
read2()  

12345
54321
egon
hello world
in read1 func alex

 

 

 

_all_约束*导入的个数     _all_=[谁],就导入谁,只能用来约束

模块引用中的情况

1.模块的循环引用     重点***

模块间不允许循环引用

2.模块的加载和修改

如果已经被导入到的模块发生了修改,是不会被感知到的,想要修改的话就要重启程序

3.把模块当成脚本来使用  贼重要************

 

if __name__ == '__main__':
  代码
写在这里面的代码只有这个文件被当做脚本执行的时候才执行
当一个py文件做脚本的时候,就提供一个功能。当作为模块导入的时候,能调用这个功能,但不能自主交互

 一个文件中的_nane_变量:

当文件被当做脚本执行的时候,_name_=="_main_"

当文件被当做模块导入的时候,_name _=="模块的名字"

4.模块搜索路径

被当做脚本执行文件的时候,同目录下的文件可以直接导入,除此之外,其他路径下的模块被导入的时候需要自己修改sys.path列表

 不在同一目录下的话:就调用sys模块

import  sys

print(sys.path)

path=r"要导入模块的路径'

sys.path.append(path)

然后调用你要导入的模块

import sys
print(sys.path)
path=r"F:\上课作业视频\模块的相关知识\day21\code\day21\5模块的循环引用"
sys.path.append(path)
import hhh

['F:\\上课作业视频\\模块的相关知识\\day21\\code\\day21', 'F:\\上课作业视频', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages', 'C:\\Program Files\\JetBrains\\PyCharm 2018.1.3\\helpers\\pycharm_matplotlib_backend']
123456798

 

 包:凡是导入时带点的,点的左边必须是包

什么是包:文件夹中有一个__int__.py文件,也是几个模块的集合

从包中导入模块:

1.import方式

egg:

import glance.api.policy as hhh

hhh.get()

2.from import

from glance.api.import policy

egg:

from glance.api.policy import get

get()

 

posted @ 2018-08-23 21:35  魏三斗  阅读(128)  评论(0编辑  收藏  举报