模块

模块

'''
什么是模块:
    模块就是一系列功能的结合体

模块的三种来源:
    1.内置
    2.第三方(就是别人写的模块)
    3.自带以(自己写的)

模块的四种表现形式:
    1.使用python编写的py文件(可以说一个py文件就是一个模块)
    2.已被编译为共享库或DLL的C或C++扩展(了解)
    3.把一系列模块放入一个文件夹下(这个文件夹就是一个包,文件夹下必须有__init__文件)
        包就是一系列模块的结合体
    4.使用C编写并连接到python解释器的内置模块

为什么要用模块?
    1.用别人写好的模块,极大的提高开发效率
    2.用自己写的模块
        在开发项目的时候,不可能把所有的代码写在一个py文件中,需要写入多个文件中
        可以将核心的写法写在一个文件中,其他文件可以使用模块进行导入

在使用模块时,需要区分好什么是被执行文件,
                       什么是导入文件,就是什么是模块

'''

import方法

'''

'''
import md1
'''
右键执行run1文件
    1.首先会在执行文件中创建一个属于run1的名称空间
    2.首次导入模块(md1.py)
        1.会执行md1文件
        2.运行md1.py文件中的代码,再创建属于md1的的名称空间,再将执行代码产生的名字和值得放入mckj
        3.在执行文件中产生一个可以指向md1名称空间的名字
        
        
多次导入模块不会反复执行模块中的代码,只有第一次会执行模块中的代码
再次导入就直接指向第一导入的成果(就是第一次导入的时候,已经产生名称空间,所有东西都在内存中了,再次导入直接指向名称空间在内存中的地址)


'''

# 访问模块中名字指向的值
money = 99
md1.read1()  # md 1000


'''
只要你能拿到函数名 无论在哪都能通过函数名加括号进行调用(调用的时候会回到函数定义阶段,依次执行代码)
函数在定义阶段,名字查找顺序就已经固定好了,不会因为调用位置的改变而改变



使用import调用模块后,想在模块名称空间中使用名字,统一句式:模块名.名字
    1.模块名.名字访问模块中的名字,永远不会与执行文件中的名字相冲突
    2.想访问模块中的名字,必须使用 模块名.名字
    
    
    
同时导入多个模块,最好像一下方式
import time
import os 
import sys
不推荐
import sys,os,time


模块名比较复杂是可以给模块起别名
import md1 as m
'''

from...import...使用方法

''''''
'''
可以一次性导入md文件中多个名字
from md import money,read1,read2


'''
from md import money,read1,read2
'''
在运行run文件时
    首先会创建run的名称空间,再导入md模块
    第一次导入md模块
        会执行md模块中的代码
        创建md模块的名称空间
        直接拿到md名称空间中某个值的名字
'''
'''
使用from...import...的特点
    访问模块中的名字是不需要加模块名的前缀
    访问模块中的名字会与执行文件名称空间中的名字冲突
'''

from md import *
# 可以将模块中所有名字全部取出  不推荐使用 你可能根本不知道哪些值可用
print(money)
print(read1)
print(read2)


# 使用__all__时,可以指定py文件当做模块被导入时,
# 限制导入者能拿到名字的个数

 

posted @ 2019-07-16 19:21  Nmdlao  阅读(133)  评论(0编辑  收藏  举报