模块


模块

目录
  • 模块
    • 面向过程编程(理论)
    • 模块介绍
    • import句式
    • from...import...句式
    • 导入模块扩展用法
    • 判断文件类型
    • !!! 循环导入 (看看就行了)
    • 模块导入顺序

面向过程编程(理论)

面向过程编程就好比在设计一条产品流水线

# 用户注册功能
1.获取用户名和密码
2.组织成固定的格式
3.文件操作写入文件

'''面向过程编程的缺陷在于:一旦要修改功能 那么需要整体改造(牵一发而动全身)'''
def get_info():
    username = input('username>>>').strip()
    password = input('password>>>').strip()
    if len(username) == 0 or len(password) == 0:
        print('用户名密码不能为空')
        return
    user_idf = {
        '1': 'adimn',
        '2': 'user'
    }
    print(user_idf)
    choice = input('请选择你的身份>>>').strip()
    if choice in user_idf:
        id = user_idf.get(choice)
        return deal_data(username, password, id)
    else:
        print('输入不合法')
        return


def deal_data(username, password, id):
    data = '%s|%s|%s\n' % (username, password, id)
    return save_data(data)


def save_data(data):
    with open(r'userinfo', 'a', encoding='utf8') as f:
        f.write(data)
    print('注册成功')


get_info()

模块介绍

python语言
	最早起源与linux运维、胶水语言、调包侠(贬义词>褒义词)   
1.什么是模块
	一系列功能的结合体
2.为什么要我用模块
	为了提升开发效率 
3.模块的三种来源
	1.内置的(python解释器自带能够直接导入使用)
    2.第三方的(别人写好的发布在网上,需要下载后使用)
    3.自定义形式
4.模块的四种表现形式
	1.使用python编写的代码(.py文件)
    2.已编译为和共享库或者DLL的C或者C++扩展
    3.包好一组模块的包(文件夹)
    	#包其实就是多个py文件(模块)的集合
        	包里面通常会含有一个——init_.py文件
    4.使用C编写的并连接到python解释器的内置模块
    
    

import句式

import md  						#导入py文件 文件后缀一定别加

'''
多次导入相同模块 指挥执行一次

首次导入md模块发生的事情
	1.运行导入文件(import句式.py)产生该文件的全局名称空间
	2.运行面md.py文件
	3.产生md.py文件全局名称空间 运行md文件内代码 将产生的名字全部存放于面对.py名称空间
	4.在导入文件名称空间产生一个md的名字指向md.py全局名称空间
	
	imoport 句式导入模块之后
		通过模块名点(.)的方式就可以使到模块中的所有的名字(指名道姓) 并且肯定不会产生冲突
'''

from...import...句式

from...import...多次导入也只会导入一次
	1.先产生执行文件的全局名称空间
    2.执行模块文件 产生模块的全局名称空间
    3.将模块中执行之后产生的名字全部存档与模块名称空间中
    4.在执行文件中有一个money执行模块名称空间中money指向的值
    
    from...import...指名道姓的导入某个名字
    	在使用的收直接写名字就即可 但是当当前名称空间有相同名字的时候就会产生冲突 使用的就变成了当前名称空间
        

导入模块扩展用法

1.起别名
	既可以给模块名起别名也可以给模块中某个名字起别名
	import 模块名 as m
    from 模块名 import name as n
    
2.连续导入
	import 模块名1, 模块名2
    	#可以连续导入多个模块 但是只有当多个模块功能相似或者属于同一个系列
        #如果功能不同并且不属于同一个系列 那么推荐分行导入
        import 模块名1
        import 模块名2
    from 模块名1 import 名字1, 名字2, 名字3
    
3.通用导入
	from md import * 		#将模块中所有的名字全部到导入(*表示所有)
    print(模块里的函数)
    print(模块里的函数)
    print(模块里的函数)
    print(模块里的函数)
    __all__ = ['模块里的函数', '模块里的函数']
    #在被导入的模块文件中可以使用————all__指定可以被导入使用的名字

判断文件类型

判断文件是作为模块文件还是执行文件
__all__当文件是执行文件的时候会返回__main__
如果文件是被当作模块导入则返回文件名(模块名)

if __name__ == '__main__':
    read1
'''在pycharm中可以直接敲 main按tab键即可自动补全id判断'''

!!! 循环导入 (看看就行了)

1.调换顺序
	将彼此的句式放在代码的最后
2.函数形式
	将导入的句式放入函数体代码 等待所有的名字加载完毕之后再调用

模块导入顺序

'''
1.先从内存中查找
2.再去内置模块中查找
3.最后去sys.path系统路径查找(自定义模块)
如果都没有则直接报错
'''
在给py文件命名的时候尽量不要与内置模块名冲突

import sys
print(sys.path)		#结果中第一个元素永远是当前执行文件所在的路径

当某个自定义模块查找不到的时候解决方案
	1.自己手动将该模块所在的路径添加到sys.path中
    	import sys
        sys.path.append(r'D:\py20\day18\aaa')
    2.from...import...句式
    	from 文件夹名称.文件夹名称 import 模块名
        from 文件夹名称.模块名称 import 名字