一、模块

1、简介

  • 本质:模块是指内部具有一定功能(代码)的py文件
  • 发展历史:
    • 前期:在python刚开始的时候其他编程语言都看不起python,认为python是’掉包侠‘
    • 后期:随着市场发展有更多人了解python,这时python‘掉包侠’的外号从贬义词变为了褒义词

2、模块的表现形式

  • 1、py文件(py文件也可以称之为是模块文件)
  • 2、含有多个py文件的文件夹(按照模块功能的不同划分不同的文件夹储存)
  • 3、已被编译为共享库或DLL的C或C++扩展
  • 4、使用C编写并链接到python解释器的内置模块

二、模块的分类

1、自定义模块

  • 此类模块是我们自己编写的模块文件

2、内置模块

  • python内置模块,不需要下载,只要在py文件内部调用就可使用

3、第三方模块

  • 是从网络上下载的模块,此类模块功能比较强大,是python背后的大佬进行编写,上传后供我们使用的模块

三、导入模块的句式

学前须知:

  • 1、执行文件:运行代码的主文件
  • 2、被导入文件:指存放模块的文件,需要导入在执行文件
  • 3、以后在编写代码时,py文件的名称一般是纯英文,不会含有中文或空格
  • 4、被导入的模块文件不需要填写后缀名

1、import句式

关键词:import
导入用法:
import 模块名 优点:
1、可以一次性导入所有模块名称空间中名字
2、需要模块名加点的方式才能调用,不易弄混
缺点:
1、必须要模块名加点的方式才能调用,比较麻烦 '''
底层原理:
1、先产生执行文件的空间名称
2、执行被导入文件的代码,将产生的名字放入被导入文件的名称空间中
3、在执行文件的名称空间中产生一个模块的名字
4、在执行文件中使用该模块名加点的方式使用模块名称空间中的所有名字
'''

2、from...import...句式

关键词:from...import...
导入用法:
from 文件地址/文明名 import 文件名/名称空间名字 from也可以通过*号的方式来导入所有模块内的名字
在模块中可使用__all__的方式来限制*号导入名字,只有在__all__后方列表内的名字才能
被*号使用 '''
底层原理:
1.先产生执行文件的名称空间
2.执行被导入文件的代码将产生的名字放入被导入文件的名称空间中
3.在执行文件的名称空间中产生对应的名字绑定模块名称空间中对应的名字
4.在执行文件中直接使用名字就可以访问名称空间中对应的名字
''' 优点:
1、可以指名道姓的调用模块中需要的名字
缺点:
1、调用时容易弄混

3、补充说明

  • 起别名

    • 可以通过以上两种句式在导入模块名的后方加as修改模块名

  • 一次性导入多个模块

    • 可以使用逗号的方式一次性导入多个模块,在模块功能相似度不高的情况下不推荐使用

四、循环导入问题

1、循环导入

  • 循环导入是指两个文件之间相互导入,并且相互使用各自名称空间中的名字

2、如何解决循环导入问题

  • 1、确保名字在使用前就已经准备完毕

    • 这种方式可能会出现代码循环执行多次的请款
  • 2、这种情况非常容易报错,在以后的使用当中,如果无特殊情况尽量避免这种情况发生

五、判断文件类型

	所有的py文件都可以运行 __name__ 运行后所对应的值是 __main__,但当我们运行的是导入文件时,系统则会返回给我们模块名

    我们在开发模块阶段,会使用模块名来测试模块的功能,如果直接使用名称调用的话,这样别人在导入模块后会直接使用模块中的名字,造成诸多不便,由此,我们可以得出,使用if设置条件来将名称作为子代码执行条件,这样模块被导入后就不会直接运行
if __name__ == __ main__:
测试名称1...
测试名称2...
测试名称3...
'''
应用场景:
1、模块开发阶段
2、项目启动文件
'''

六、模块查找顺序

1、内存

  • 在导入模块时,python会首先在内存中查找模块名,当系统中无此模块名的时候会报错

2、内置空间

  • 在我们导入模块时要避免模块名和内置模块名冲突的问题,若自定义模块和内置模块名冲突时,系统只会执行内置模块功能,执行自定义模块功能时,系统会报错

3、执行python所在的sys.path(系统环境)

  • 1、当我们导入的模块在上述空间中都没有找到时,pycharm会到py执行文件所在的sys.path中寻找,所有我们在导入模块时,需要将添加至执行文件所在的sys.pach目录中!

  • 2、可通过打印sys.pach的方式来查看执行文件所在的地址

  • 3、可通过sys.pach.append的方式来将模块文件导入到执行文件的目录中

七、绝对导入与相对导入

1、绝对导入

绝对导入是指以执行文件所在目录为绝对路径的方式,将模块地址导入到py文件中

导入方式:

from 模块地址 import 模块名称/名称空间名字

2、相对导入

这种导入方式不是以sys.path目录为相对路径,导入的其他模块中需要导入的地址是相对于模块的位置,这种话方式可以通过点的方式简写

  • . # 表示当前目录
  • ... # 表示路径中上一层目录
  • .. \ .. # 表示上上一层目录

注意事项:在执行中无法使用相对导入,这种方式会式系统报错

八、包

  • 1、指含有多个py文件的集合
  • 2、专业:内部含有__ init__.py文件的文件夹(python2必须要求 python3无所谓)

九、练习题

将员工管理系统生成模块后运行。。。。

Administrator = 'kang|111'  # 管理员账户

adm = 'b'  # 管理员登录状态

user_name_dict = {
'10086': {'user_id': '10086', 'user_name': 'xiaokang', 'user_paw': '123', 'user_sex': '男', 'user_age': '18',
'user_post': 'IT', 'user_pay': '100000'},
'10010': {'user_id': '10010', 'user_name': 'zhangzhang', 'user_paw': '123', 'user_sex': '男', 'user_age': '18',
'user_post': 'IT', 'user_pay': '100000'},
'123456': {'user_id': '123456', 'user_name': 'zhaozhao', 'user_paw': '123', 'user_sex': '男', 'user_age': '18',
'user_post': 'IT', 'user_pay': '100000'},
'112233': {'user_id': '112233', 'user_name': 'xiaolv', 'user_paw': '123', 'user_sex': '女', 'user_age': '18',
'user_post': 'IT', 'user_pay': '100000'}
} # 用户账户 state = 'wrong' # 用户登录状态 def outer(func):
def inner(*args, **kwargs):
res = func(*args, **kwargs)
return res return inner @outer
def login():
'''员工注册系统'''
while True:
administrator_name = input('请管理员账号(Q退出)>>>:').strip().lower()
if administrator_name == 'q':
break
administrator_paw = input('请输入管理员密码>>>:').strip()
administrator_name_paw = administrator_name + '|' + administrator_paw
if administrator_name_paw == Administrator:
global adm
adm = 'a'
user_id = input('请创建员工编号(Q退出)>>>:').strip().lower()
if user_id == 'q':
break
if not user_id.isdigit():
print('编号有误,只能是数字')
elif user_id in user_name_dict:
print('该编号已存在,请重新注册')
else:
user_name = input('请输入员工姓名>>>:').strip()
user_paw = input('请输入员工登录密码>>>:').strip()
user_sex = input('请输入员工性别>>>:').strip()
user_age = input('请输入员工年龄>>>:').strip()
user_post = input('请输入员工岗位>>>:').strip()
user_pay = input('请输入员工薪资>>>:').strip()
if not user_pay.isdigit() and not user_age.isdigit():
print('您输入的年龄或薪资有误,只能是纯数字')
else:
briefly_dict = {}
briefly_dict['user_id'] = user_id
briefly_dict['user_name'] = user_name
briefly_dict['user_paw'] = user_paw
briefly_dict['user_sex'] = user_sex
briefly_dict['user_age'] = user_age
briefly_dict['user_post'] = user_post
briefly_dict['user_pay'] = user_pay
user_name_dict[user_id] = briefly_dict
print(f'员工{user_name}添加完成')
break
else:
print('管理员账号或密码错误')
break @outer
def adm_register():
'''管理登录系统'''
while True:
global adm
if adm == 'a':
print('管理员账户已登录,请勿重复登录')
break
adm_name = input('请输入管理员账号(Q退出)>>>:').strip().lower()
if adm_name == 'q':
break
adm_paw = input('请输入管理员登录密码>>>:').strip()
adm_name_paw = adm_name + '|' + adm_paw
if adm_name_paw == Administrator:
print('管理员用户登录成功')
adm = 'a'
break
else:
print('用户名或密码错误') @outer
def register():
'''员工登录系统'''
while True:
if adm == 'a':
adm1 = input('已登录管理员账户,无法重复登录(Y:返回上一步)').strip().lower()
if adm == 'y':
break
global state
if state == 'correct':
print('已登录,请勿重复登录')
user_id = input('请输入您的用户编码(Q退出)>>>:').strip().lower()
if user_id == 'q':
break
user_paw = input('请输入您的登录密码>>>:').strip()
if user_id in user_name_dict and user_paw == user_name_dict[user_id]['user_paw']:
print(f"用户{user_name_dict[user_id]['user_name']}登录成功")
state = 'correct'
break
else:
print('用户名或密码错误') @outer
def amend_pay():
'''修改薪资'''
while True:
if adm == 'a':
user_id = input('请输入员工编号(Q退出):').strip().lower()
if user_id == 'q':
break
if user_id in user_name_dict:
global user_pay
user_pay = input('请输入修改后的薪资>>>:').strip()
user_name_dict[user_id]['user_pay'] = user_pay
print(f"员工{user_name_dict[user_id]['user_name']}薪资成功修改为{user_pay}元")
break
else:
print('员工编号有误,请重新输入')
break
else:
print('管理员账户未登录,其余人员无权修改薪资')
break @outer
def amend_post():
'''修改岗位'''
while True:
if adm == 'a':
user_id = input('请输入员工编号(Q退出):').strip().lower()
if user_id == 'q':
break
if user_id in user_name_dict:
global user_post
user_post = input('请输入调整后的岗位>>>:').strip()
user_name_dict[user_id]['post'] = user_post
print(f"员工{user_name_dict[user_id]['user_name']},岗位已调整为{user_post}")
break
else:
print('员工编号输入有误,请重新输入')
else:
print('管理员账户未登录,其余人员无权修改岗位')
break @outer
def message():
'''查看员工信息'''
while True:
if adm == 'a' or state == 'correct':
user_id = input('请输入需要查看信息的员工编号(Q退出):').strip().lower()
if user_id == 'q':
break
if user_id in user_name_dict:
print(f'''
-----------------------------------
姓名:{user_name_dict[user_id]['user_name']}
编号:{user_id}
性别:{user_name_dict[user_id]['user_sex']}
年龄:{user_name_dict[user_id]['user_age']}
岗位:{user_name_dict[user_id]['user_post']}
薪资:{user_name_dict[user_id]['user_pay']}
-------------------------------------
''')
else:
print('系统未登录,请登陆后查看')
break @outer
def logout():
'''注销登录功能'''
global adm, state
adm = 'b'
state = 'wrong'
print('退出登录成功') execute_dict_ = {
'1': login,
'2': adm_register,
'3': register,
'4': amend_pay,
'5': amend_post,
'6': message,
'7': logout
} def start():
while True:
print('''
------------------------------
1. 员工注册系统 (高级权限) 2. 管理员登录系统 3. 员工登录系统 4. 修改员工薪资 (高级权限) 5. 修改员工岗位 (高级权限) 6. 查看员工信息 7. 退出登录
------------------------------
''')
execute = input('请输入您需要执行的功能编号(Q退出)>>>:').strip().lower()
if execute in execute_dict_:
execute_dict_[execute]()
else:
print('您选择的编号有误,请重新输入')

Python基础之模块:1、模块的导入和使用的更多相关文章

  1. Python基础(十)-模块

    模块初识 一般把不同功能代码放到不同py文件,一个py文件就是一个模块 三种模块库: 1.Python标准库 2.第三方库 3.自定义库 导入模块:import 库名 (Python解释器只认识执行文 ...

  2. 第六章:Python基础の反射与常用模块解密

    本课主题 反射 Mapping 介绍和操作实战 模块介绍和操作实战 random 模块 time 和 datetime 模块 logging 模块 sys 模块 os 模块 hashlib 模块 re ...

  3. python基础学习十 logging模块详细使用【转载】

    很多程序都有记录日志的需求,并且日志中包含的信息既有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,主要用于输出 ...

  4. python基础(10)--模块

    模块(module) 模块,用一坨代码实现了某个功能的代码集合 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来 ...

  5. Python基础(12)--模块

    本文地址:http://www.cnblogs.com/archimedes/p/python-modules.html,转载请注明源地址. 模块简介 如果你退出 Python 解释器重新进入,以前创 ...

  6. python基础8之自定义模块、if __name__==__main__:解释

    一.自定义模块与使用 python模块说明:类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  7. Python基础系列讲解——random模块随机数的生成

    随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的random模块提供了生成随机数的方法,使用这些方法时需要导入ran ...

  8. python基础教程总结9——模块,包,标准库

    1. 模块 在python中一个文件可以被看成一个独立模块,而包对应着文件夹,模块把python代码分成一些有组织的代码段,通过导入的方式实现代码重用. 1.1 模块搜索路径 导入模块时,是按照sys ...

  9. Python基础语法05--函数模块

    Python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也 ...

  10. Python基础学习之常用模块

    1. 模块 告诉解释器到哪里查找模块的位置:比如sys.path.append('C:/python') 导入模块时:其所在目录中除源代码文件外,还新建了一个名为__pycache__ 的子目录,这个 ...

随机推荐

  1. Excel 数学函数(二):ISODD 和 ISEVEN

    ISODD 函数用于判断一个数是否为奇数:ISEVEN 函数用于判断一个数是否为偶数. 结合文本函数 MID 和逻辑函数 IF,来判断一个身份证的性别. 身份证倒数第二位是奇数就代表男性,否则代表女性 ...

  2. P7727 风暴之眼 Eye of the Storm (树形 DP)

    谨 以 此 文 表 达 笔 者 个 人 观 点 , 如 有 冒 犯 官 解 , 可 在 评 论 区 诉 说 _{^{_{谨以此文表达笔者个人观点,如有冒犯官解,可在评论区诉说}}} 谨以此文表达笔者个 ...

  3. 如何结合整洁架构和MVP模式提升前端开发体验 - 整体架构篇

    本文不详细介绍什么是整洁架构以及 MVP 模式,自行查看文章结尾相关链接文章. 整洁架构粗略介绍 下图为整洁架构最原始的结构图: Entities/Models:实体层,官方说法就是封装了企业里最通用 ...

  4. 业务流程可视化-让你的流程图"Run"起来(7.运行状态持久化&轻量工作流支持)

    前言 感谢大家阅读本项目系列文章和对项目的支持.分享一下我对这个项目的新的改进. 之前项目做到了流程设计可视化和流程运行结果可视化. 本期发布的版本中实现了中间的运行过程的实时可视化,和流程状态持久化 ...

  5. ubuntu 16.04 搭建docker

    1.为确保运行的不是旧版Docker sudo apt-get remove docker docker-engine docker.io 2.添加Docker COmmunity Edition 所 ...

  6. 刨析一下C++构造析构函数能不能声明为虚函数的背后机理?

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16631774.html 先说结论: 构造函数不能声明为虚 ...

  7. KingbaseES R6 集群“双主”故障解决案例

    实际工作中,可能会碰到集群脑裂的情况,在脑裂时,会出现双 primary情况.这时,需要用户介入,人工判断哪个节点的数据最新,减少数据丢失. 一.测试环境信息 操作系统: [kingbase@node ...

  8. 我眼中的大数据(二)——HDFS

    Hadoop的第一个产品是HDFS,可以说分布式文件存储是分布式计算的基础,也可见分布式文件存储的重要性.如果我们将大数据计算比作烹饪,那么数据就是食材,而Hadoop分布式文件系统HDFS就是烧菜的 ...

  9. CI/CD集成

    文章转载自:https://kuboard.cn/guide/cicd/ 下图展示了当前比较典型的持续构建集成的一种做法. 在是否自动将最新版本部署到 Kubernetes 环境这个问题上,可能会有多 ...

  10. 3.在 Kubernetes 上安装 Gitlab CI Runner

    结合文章:1. 在 Kubernetes 上安装 Gitlab ,地址:https://www.cnblogs.com/sanduzxcvbnm/p/13852854.html 总结: 结合开头的文章 ...