第八篇模块与包

一.模块的使用之import

1.1什么是模块

模块就一系统功能的集合体,在python中,一个py文件就是一个模块,比如module.py,其中模块名module

2.2使用模块

import 导入模块
首次导入模块发生三件事
1.创建一个模块的名称空间
2.执行模块对应文件,将产生的名字存放于1中的名称空间
3.在当前执行文件中拿到一个模块名,该模块名指向1的名称空间
import spam
#强调:之后的导入会直接引用第一次导入的结果,不会重复执行文件

分清楚被导入文件和导入文件

相关执行文件

import spam
print(spam)

print(spam.money)
# spam.read1()

# 模块中功能的执行始终以模块自己的名称空间为准
# read1=111111
# print(spam.read1)

# money=1111111111111
# spam.read1()

# read1=11111111111111111111111111
# spam.read2()

# money=1111111111111111
# spam.change()
# print(money)
# spam.read1()

spam.py文件

money=1000

def read1():
    print('spam模块.read1:',money)

def read2():
    print('spam模块.read2')
    read1()

def change():
    global money
    money=0

2.3为模块起别名

import spam as sm

print(sm.money)
sm.read1()
engine=input('>>: ').strip()
if engine == 'mysql':
    import mysql as db
elif engine == 'oracle':
    import oracle as db
db.parse()

2.4一行导入多个模块(不推荐使用)

import spam,mysql,oracle

# 推荐写成多行
import spam
import mysql
import orcacle

二.模块的使用之from...import

2.1首次导入模块发生三件事

首次导入模块发生三件事
1、创建一个模块的名称空间
2、执行模块对应文件,将产生的名字存放于1中的名称空间
提示:from....import...与import前两件事一模一样
3、在当前名称空间中直接拿到模块中的名字,可以直接使用,不用加任何前缀

2.2注意

# 注意:
# 1、同import,执行模块中的功能,始终以模块的名称空间为准
money=1111111111
change()
print(money)

#2、from ... import 名字,拿到的名字可以不加前缀直接使用,使用起来更加方便
# 当问题是容易与当前执行文件中相同的名字冲突
money=1111111111111111
print(money)
read1=1111111
read1()

# 起别名
from spam import money as m
print(m)

# 在一行导入多个
from spam import money,read1,read2

from ... import *
from spam import *

print(money)
print(read1)
print(read2)
print(change)

from spam import *
print(money)
print(read1)
print(read2)

spam.py文件

#spam.py
print('from the spam.py')
__all__=['money','read1'] # from .. import *    #指的是部分名字

money=1000

def read1():
    print('spam模块.read1:',money)

def read2():
    print('spam模块.read2')
    read1()

def change():
    global money
    money=0

三.区分python文件的两种用途

spam.py文件

# print(__name__)
# __name__的值
#1、在文件被直接执行的情况下,等于'__main__'
#2、在文件被导入的情况下,等于模块名

if __name__ == '__main__':
    # print('文件被当中脚本执行啦。、。')
    read1()
else:
    print('文件被导入啦')

其他文件

import spam #打印得到的是被导入的文件

四.模块的搜索路径

4.1模块的查找顺序

1.内存中已经加载的模块
2.内置模块
3.sys.path路径中包含的模块

五.包的使用

详情点击这里

posted @ 2018-12-28 20:47  王苗鲁  阅读(81)  评论(0编辑  收藏  举报