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 ...
随机推荐
- 08 . Nginx状态码
HTTP状态码 本篇文章主要介绍运维过程中经常遇到的状态码,并通过业界流行的Nginx进行模拟实现. 2XX状态码 2XX类型状态码表示一个HTTP请求成功,最典型的就是200 # 200状态码 # ...
- 50个SQL语句(MySQL版) 问题十
--------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 tea ...
- 最好用的FTP工具,最好用的FTP工具推荐!
IIS7服务器管理工具是一个良好的FTP的客户端,可以进行FTP的操作!同时,还可以作为VNC的客户端进行VNC的相关操作!它还能连接Windows和Linux的服务器和PC,并对他们的连接状态进行实 ...
- [06]HTML基础之表单标签
1. <form>标签 表单容器,指定method属性和action属性是个良好的习惯. <form methor="POST" action="htt ...
- Chisel3 - 基本数据类型
https://mp.weixin.qq.com/s/bSrM-wLRn7O_75xYKeoaEQ Chisel中的基本数据类型,不是Verilog中的Wire和Reg.Wire和Register ...
- Java实现蓝桥杯-算法提高 P1003
算法提高 P1003 时间限制:1.0s 内存限制:256.0MB 作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词.不过,有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检 ...
- Java实现 LeetCode 768 最多能完成排序的块 II(左右便利)
768. 最多能完成排序的块 II 这个问题和"最多能完成排序的块"相似,但给定数组中的元素可以重复,输入数组最大长度为2000,其中的元素最大为10**8. arr是一个可能包含 ...
- Java实现 蓝桥杯 算法训练 Remember the A La Mode(暴力)
试题 算法训练 Remember the A La Mode 问题描述 Hugh Samston经营着一个为今年的ICPC世界总决赛的参与者提供甜点的餐饮服务.他将会提供上面有冰激凌的饼片.为了满足不 ...
- requireJS模块化
1. JavaScript里面js代码的写法:目标是解决冲突和依赖 函数式编程,全局函数和变量--很容易覆盖 对象的写法--也会从外面改变 命名空间:利用名称不同缓冲js代码的冲突---名称太长,不方 ...
- javascript内置函数提供的显式绑定
内置函数提供的显式绑定 最近在开发中遇到使用arr.map(module.fun) 这样的写法时(在一个模块调用了另外一个模块的方法), 造成了函数中this丢失的问题, 显示为undefined, ...