python 模块 来了 (调包侠 修炼手册一)
模块 什么是模块
模块:就是一系列功能的结合体 ,也可以说 一个.py文件包含了 Python 对象定义和Python语 那么 他就 可以说是 一个模块
模块的三种来源:
1.内置的(python解释器自带)**
2.第三方的 ***
3.自定义的 *
模块的四种表现形式
1.使用python编写的py文件(也就意味着py文件也可以称之为模块:一个py文件也可以称之为一个模块)
2.已被编译为共享库或DLL的C或C++扩展(了解)
3.把一系列模块组织到一起的文件夹(文件夹下有一个__init__.py文件,该文件夹称之为包)
包:一系列py文件的结合体
4.使用C编写并连接到python解释器的内置模块 为什么要用模块
1.用别人写好的模块(内置的,第三方的): 本质就是 拿来主义, 能够 极大的提高开发效率
2.使用自己写的模块(自定义的):当程序比较庞大的时候,你的项目不可能只在一个py中
那么当多个文件中都需要使用相同的方法的时候 可以将该公共的方法写到一个py文件中
其他的文件以模块的形式导过去直接调用即可 如何使用模块
注意:要区分哪个是执行文件,哪个是被导入文件 实例句式:>>>>
from filemodul.modul1 import my_modu1 my_modul.func1 () """
绝对导入必须依据执行文件所在的文件夹路径为准
1.绝对导入无论在执行文件中还是被导入文件都适用 相对导入
.代表的当前路径
..代表的上一级路径
...代表的是上上一级路径 注意相对导入不能再执行文件中使用
相对导入只能在被导入的模块中使用,使用相对导入 就不需要考虑
执行文件到底是谁 只需要知道模块与模块之间路径关系
"""
import my_modu12 """
右键运行run_modul.py文件首先会创建一个run_modul.py的名称空间
首次导入模块(my_modul.py)(******)
1.执行my_modul.py文件
2.运行my_modul.py文件中的代码将产生的名字与值存放到my_moddul.py名称空间中
3.在执行文件中产生一个指向名称空间的名字(my_modul) 多次导入不会再执行模块文件,会沿用第一次导入的成果(******)
"""
money = 9999 def read1():
print('from run read1')
# 访问模块中的名字指向的值
# print(md.money) # 使用import导入模块 访问模块名称空间中的名字统一句势:模块名.名字 # md.read1()
# md.read2()
# print(md.change) md1.change()
print(money)
print(md1.money) """
1.只要你能拿到函数名 无论在哪都可以通过函数加括号来调用这个函数(会回到函数定义阶段 依次执行代码)
2.函数在定义阶段 名字查找就已经固定死了 不会因为调用位置的变化而改变 使用import导入模块 访问模块名称空间中的名字统一句势:模块名.名字
1.指名道姓的访问模块中的名字 永远不会与执行文件中的名字冲突
2.你如果想访问模块中名字 必须用模块名.名字的方式
""" """
只要当几个模块有相同部分或者属于用一个模块,可以使用上面的方法
当几个模块没有联系的情况下 应该分多次导入
import os
import time
import md
ps:通常导入模块的句式会写在文件的开头
""" """
当模块名字比较复杂的情况下 可以给该模块名取别名
from my_modul_file import modul
当我们运行执行文件 ,执行文件 会先产生执行文件的名称空间 ,然后 执行到 from my_modul_file import modul 语句 会执行一次
my_modul_file.py 文件一次 ,然后 生成属于my_modul_file.py的名称空间,接下来 会往执行文件中添加 相应对象名称.
如果我们使用from md import * 的方式 ,可以一次性将所有的md文件中的名称全部导入执行文件名称空间中 ,但是不是很推荐这种写法,如果导入
的模块 我们不是很熟悉,那么 很多变量名会被占用 ,且该方法会浪费大量的资源.
如果实在要用 * 来载入 那么md 文件中的__all__[]方法 可以指定 当py文件被当做 模块导入的时候 哪些名称会被拿走 ,如果不写 ,就默认是该文件
内的所有名称.
如果出现循环导入问题 那么一定是你的程序设计的不合理
循环导入问题应该在程序设计阶段就应该避免 解决循环导入问题的方式
1.方式1
将循环导入的句式写在文件最下方() 2.方式2
函数内导入模块
# print(__name__)
# 当文件被当做执行文件执行的时候__name__打印的结果是__main__
# 当文件被当做模块导入的时候__name__打印的结果是模块名(没有后缀)
# if __name__ == '__main__':
# index1()
# index2() # if __name__ == '__main__': # 快捷写法 main直接tab键即可
# index1()
# index2()
"""
模块的查找顺序
1.先从内存中找
2.内置中找
3.sys.path中找(环境变量):
一定要分清楚谁是执行文件谁是被导入文件(******) 是一个大列表,里面放了一对文件路径,第一个路径永远是执行文件所在的文件夹
"""
# import time
# import md
# time.sleep(20)
# md.f1() # import time
# print(time.name)
#
# """
# 注意py文件名不应该与模块名(内置的,第三方)冲突
# """
当一个模块被导入到一个脚本,模块顶层部分的代码只会被执行一次。
因此,如果你想重新执行模块里顶层部分的代码,可以用 reload() 函数。该函数会重新导入之前导入过的模块。语法如下:
reload(module_name)
python 模块 来了 (调包侠 修炼手册一)的更多相关文章
- python模块安装查看、包制作
一. 模块安装 ubuntu : apt-get install python-pip redhat: yum install python-pip pip install 模块 pip instal ...
- Python模块包(pycharm右键创建文件夹和python package的区别)中__init__.py文件的作用
在eclipse中用pydev开发Python脚本时,我遇到了一个这样的现象,当我新建一个pydev package时,总会自动地生成一个空的__init__.py文件,因为是python新手,所以很 ...
- 18.Python模块包(pycharm右键创建文件夹和python package的区别)中__init__.py文件的作用
原来在python模块的每一个包中,都有一个__init__.py文件(这个文件定义了包的属性和方法)然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了.当 ...
- Python深入:Distutils发布Python模块--转载
https://blog.csdn.net/gqtcgq/article/details/49255995 Distutils可以用来在Python环境中构建和安装额外的模块.新的模块可以是纯Pyth ...
- Python深入:Distutils发布Python模块
Distutils可以用来在Python环境中构建和安装额外的模块.新的模块可以是纯Python的,也可以是用C/C++写的扩展模块,或者可以是Python包,包中包含了由C和Python编写的模块. ...
- 大话python模块与包
前言 眼看着老掌门年纪越来越大,掌门之位的传承也成了门派中的一件大事.这天,老掌门把小掌门叫到跟前,语重心长地说道:孩子啊,以后你就要继任掌门之位了,我就传授此生所学的绝世功法与你,以后可要悉心学习, ...
- 【数学建模】线性规划各种问题的Python调包方法
关键词:Python.调包.线性规划.指派问题.运输问题.pulp.混合整数线性规划(MILP) 注:此文章是线性规划的调包实现,具体步骤原理请搜索具体解法. 本文章的各个问题可能会采用多种调用方 ...
- (三)运用Python模块和包
1 引言 为了能够在Python项目中高效地运用Python模块和包,我们需要进一步地来了解它们是如何在Python项目中进行定义.使用和工作的. 2 Python模块和包 Python模块和包的基本 ...
- python模块及包的导入
一.模块 通常模块为一个文件,直接使用import来导入就好了.可以作为module的文件类型有".py".".pyo".".pyc".&q ...
随机推荐
- 电子邮件协议及GO发送QQ邮件
目录 一.电子邮件的工作机制 1.1 SMTP 1.2 POP3 1.3 IMAP 二.邮件地址 三.MIME信息 四.使用golang发送qq邮件 一.电子邮件的工作机制 提供电子邮件服务的协议叫做 ...
- 50个SQL语句(MySQL版) 问题九
--------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 tea ...
- Cypress系列(5)- 自定义 Cypress
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 前言 Cypress 不仅支持用户自定义 ...
- 【Storm】核心组件nimbus、supervisor、worker、executor、task
nimbus 是整个集群的控管核心,负责topology的提交.运行状态监控.任务重新分配等工作. zk就是一个管理者,监控者. 总体描述:nimbus下命令(分配任务),zk监督执行(心跳监控wor ...
- 高性能可扩展mysql 笔记(四)项目分区表演示
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 登录日志的分区 如何为Customer_login_log表分区? 从以下两个业务场景入手: 用户每次登 ...
- Java实现 LeetCode 645 错误的集合(暴力)
645. 错误的集合 集合 S 包含从1到 n 的整数.不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复. 给定一个数组 n ...
- Java实现 LeetCode 415 字符串相加
415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 注意: num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num ...
- Java实现 LeetCode 208 实现 Trie (前缀树)
208. 实现 Trie (前缀树) 实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = new Trie() ...
- java实现第六届蓝桥杯表格计算
表格计算 某次无聊中, atm 发现了一个很老的程序.这个程序的功能类似于 Excel ,它对一个表格进行操作. 不妨设表格有 n 行,每行有 m 个格子. 每个格子的内容可以是一个正整数,也可以是一 ...
- PAT 挖掘机技术哪家强
为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 105 的正整数 N,即参赛人数.随后 N ...