模块重点知识详解这里看

今日内容概要

  • 面向过程编程
  • 模块简介
  • import句式
  • from...import...句式
  • 循环的导入问题
  • 绝对导入与相对导入

内容详细

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

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

"""
面向过程编程的缺陷
	一旦要修改功能 那么需要整体修改(牵一发而动全身)
"""
def get_info():  # 定义函数
    username = input('username>>>:').strip()  # 获取用户名
    password = input('password>>>:').stirp()  # 获取密码
    if len(username) == 0 or len(password) == 0:  # 增加判断输入不为空功能
        print('用户名或密码不能为空')
        return
    user_id = {  # 用户身份
        '1':'admin' 
        '2':'user'
    }
    print(user_id)
    choice = input('选择您的身份:').strip()
    if choice in user_id:
        id = user_id.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_tada(data)

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

image

  • 模块简介
python语言
	最早起源于Linux运维,也叫'胶水语言' '调包侠'(贬义词>>>褒义词)
    
1.什么是模块
	一系列功能的结合体
2.为什么要用模块
	为了提升开发效率
3.模块三种来源
	1.内置的(python解释器自带的 能够直接导入使用)
	2.第三方的(别人写好发布在网上 需要先下载后使用)
	3.自定义的(自己写的)
4.模块的四种表现形式
	1.使用python编写的代码(.py文件)
	2.已被编译为共享库或DLL的C或C++扩展
	3.包好一组模块的包(文件夹)  
    	包其实就是多个py文件(模块)的集合
    	包里面通常会含有一个__init__.py文件
    4.使用C编写并链接到python解释器的内置模块
"""
了解模块以后 在编写大型项目的时候
遇到复杂功能 先考虑是否有相应的模块可以调用
"""

image

  • import句式
'''使用模块时 一定要先区分好谁是导入(执行)文件 谁是模块文件'''
import 文件名  # py文件名后缀一定不能加

"""
多次导入同一模块 只会执行一次

首次导入模块(内部本质):
	1.运行导入文件(import句式.py)产生该文件的全局名称空间
	2.运行md.py文件
	3.产生md.py全局名称空间 运行md文件内代码 将产生的名字全部存档于md.py名称空间
	4.在导入文件名称空间产生一个md的名字指向md.py全局名称空间
	
import句式导入模块之后
	通过模块名.(点)的方式就可使用到模块中所有的名字 并且肯定不会产生冲突(指名道姓)
"""
md.py文件
	moeny = 1000
    
当前执行文件
	money = 888
    print(md.money)  # 1000

image

  • from...import...句式
from md import money

"""
from...import... 多次导入也只会导入一次(内部本质)
	1.先产生执行文件的全局名称空间
	2.执行模块文件 产生模块的全局名称空间
	3.将模块中执行之后产生的名字全部存档于模块名称空间中
	4.在执行文件中有一个money执行模块

from...import... 区别
	在使用的时候直接写名字即可 不需要加模块名
	print(money)
	
	但是在当前文件空间中如果有相同的名字 会产生冲突
	使用的就变成了当前名称空间中的名字
	
"""
md.py文件
	moeny = 1000
    
当前执行文件
	money = 888
    print(money)  # 888

image

  • 导入模块扩展用法
1.起别名
	既可以给模块起别名
	也可以给模块中的某个名字起别名
	import mdddddddd as m  # 模块名(文件名)改为 m 调用时只能用 m 调用
	from mddddddd import name as n  # 变量名name 改为 n 调用时只能用 n 调用
    
2.连续导入
import 模块名1,模块名2...
# 可以连续导入多个模块 但是只有当多个模块功能相似或者属于同一个系列
# 如果功能不同并且不属于同一个系列 最好分行导入
import 模块名1
import 模块名2

from 模块名1 import 名字1,名字2,名字3
from 模块名2 import 名字1,名字2,名字3

3.通用导入
from md import *  # 将模块中所有的名字全部导入(* 表示所有)

__all__ = ['money', 'name']  # 在被导入模块文件中使用 可以指定能够被导入使用的名字

image

  • 判断文件类型
'''判断py文件是作为模块文件还是执行文件'''
__name__ 当文件是执行文件的时候 返回 __main__
如果文件是被当作模块导入 则返回文件名(模块名)

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

image

  • 循环导入
"""
如果今后我们在导入模块的时候 出现了循环导入的情况
说明我们的程序设计不合理
"""
## 编程中是不允许出现循环导入现象的

# 假如真的出现了循环导入现象
1.调换顺序
	将彼此导入的句式放在代码体的最后
2.函数形式
	将导入的句式放入函数体代码 等待所有的名字(元素)加载完毕之后再调用

image

  • 模块导入的顺序
"""
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 变量名

image

posted @ 2021-11-23 17:36  Deity_JGX  阅读(82)  评论(0)    收藏  举报