PYTHON-模块定义 搜索路径
模块是什么: *****
模块 是一系列功能的集合体
一个py文件就是一个模块
一个函数就是一个功能
例如 A.py 文件名A.py 模块名 A 模块有哪些来源
内置
第三方
自定义 模块有四种通用的类别:
1.自定义模块 *****
(第三方模块也属于自定义 它是别的程序员写的 )
关注如何自定义
2.内置模块 ****
是c语言写的 然后连接到python解释器中
例如 time模块
关注如何使用 3.已经编译为DLL c或c++ ***
不需要知道怎么来的 会用就行
4.包 *****
包实际上是包含一堆模块的文件夹
之后详细将
对于这四种模块 它们的使用方式 是一致的 如何定义模块:*****
创建一个py文件 把你的功能写到文件中
为何用模块:
1,使用内置和第三方的模块:拿来主义可以极大地提高开发效率
2,使用自定义模块:为了减少代码冗余 如何使用模块:*****
大前提:使用模块必须区分开谁是执行文件,谁是被导入的模块 import 模块名
使用:必须加前缀(模块名.)
优点:指名道姓地向某一个模块的名称空间要名字,肯定不会与当前执行文件名称空间中的名字冲突
缺点:必须加前缀,不够简洁 首次导入模块发生3件事(import spam):
1. 产生一个模块的名称空间
2. 执行被导入spam.py内的代码,将执行过程中产生的名字丢存放于模块的名称空间中
3. 在当前执行文件中拿到一个模块名,该名字是指向模块的名称空间的 from 模块名 import名字
使用:直接使用名字
优点:无需加前缀,使用更为简洁
缺点:容易与当前执行文件名称空间中的名字冲突 首次导入模块发生3件事(from spam import money):
1. 产生一个模块的名称空间
2. 执行spam.py内的代码,将执行过程中产生的名字丢存放于模块的名称空间中
3. 在当前执行文件中拿到一个名字money,该名字直接指向模块的名称空间的那个money的内存地址 注意: 函数的作用域关系在定义阶段就已经固定死了,与调用位置无关 简单的说其实就是得到了一个名称 这个名字指向被导入文件
一旦有了这个名称我们就可以通过这个名称找到对应的命名空间中的所有名称 import 的其他写法 *****
1.import xxx as xxx
给模块取别名 用于简化书写
6 from xxx import xx as xx
取别名 2.import xxx,xxxx
一次导入多个模块
4.from xxx import xxx,xxx,xx
从模块中导入多个名称 3.from xxx import xxx
从模块中导入某个名字到当前名称空间
注意 要避免名称冲突
如果冲突了 按照就近查找原则
5.from xxx import *
从模块中导入所有名称
__all__用于控制 使用者可以使用哪些名称 from 和 import 除了导入的名称 不同 其他特性一致 思考:
在模块的使用.py文件中
加入:
import spam
import spam
import spam
import spam
问:"from the spam" 输出几次?
答案是1次: 模块的中代码仅在首次导入时执行一次 执行文件和被导入的模块的命名空间 是相互独立的 ****
在被导入模块中 所有的名字使用的都是自己空间中的 和调用者无关 py文件的两种执行方式 *****
1.作为执行文件 (右键run)
2.作为模块被导入 __name__ 这个名称 可以获取当前执行状态
如果是__main__ 说明当前是执行文件
否则 说明是作为模块
于是乎有了以下代码
if __name__ == "__main__":
print("作为执行文件")
else:
print("作为模块导入了") 模块的搜索路径的优先级
内存中已经加载过的 -> 内置模块 -> sys.path # 第一个值是当前执行文件所在的文件夹 sys.modules 查看内存中已加载的
其中只有sys.path 我们可以操作
通常我们会将模块的路径手动添加到sys.path中 # 方案一:
# import sys
# sys.path.append(r'D:\脱产三期视频\day16\03 模块的搜索路径1\dir1')
# print(sys.path) # import m1
# m1.f1() # 方案二:
# from dir1 import m1
# m1.f1() from dir1.dir2 import m2
m2.f2()
PYTHON-模块定义 搜索路径的更多相关文章
- 如何在sublime3项目设置中设置python模块的搜索路径?ImportError: No module named *的解决办法
问题:之前使用pycharm,用的挺溜,但是电脑配置实在不争气,pycharm启动久了,耗去大量内存,导致运行起来越来越慢,于是转向使用sublime text. 把项目从pycharm切换到subl ...
- python import模块的搜索路径
当在py代码中import所依赖的模块时, python是从哪里找到这些模块呢,即模块的搜索路径是啥? 默认情况下,Python解释器会搜索当前目录.所有已安装的内置模块和第三方模块,搜索路径存放在s ...
- Python 1-3区分Python文件的两种用途和模块的搜索路径
区分Python文件的两种用途 run.py文件: import m1 m1.py文件: def f1(): print('f1') def f2(): print('f2') #当文件被执行时__n ...
- 模块的四种形式、 import和from...import、 循环导入问题、模块的搜索路径、 python文件的两种用途
目录 模块的四种形式 模块 模块的四种形式 import和from...import 循环导入问题 模拟问题的发生: 解决方案 模块的搜索路径 Python文件的两种用途 模块的四种形式 Nike推荐 ...
- Python 模块定义、导入、优化详解
一.定义 模块:用来从逻辑上组织 python 代码(变量,函数,类, 逻辑:实现一个功能),本质就是 .py 结尾的 python文件(例如:test.py文件,对应的模块名:test) 包:用来从 ...
- python 模块定义导入
1.定义模块:用来从逻辑上组织python代码(变量.函数.类.逻辑:实现一个功能),本质就是:.py结尾的python文件(文件名:test.py,对应的模块名:test)包:本质就是一个目录(必须 ...
- ubuntu为Python添加默认搜索路径
我们在自己写python模块的时候,怎么样把自己写的模块加入到python默认就有的搜索路径中呢?不要每次非得import sys; sys.path.append(‘/home/uestc/rese ...
- Python模块定义和使用
Python中所谓的模块就是一个Python文件,一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块.模块由代码.函数或类组成.编程中使用模块不仅可以提 ...
- Python3基础 sys.path.append 增加模块的搜索路径
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
随机推荐
- babel的使用及babel与gulp结合工作流
Babel 通过语法转换器支持最新版本的 JavaScript . 它有非常多的插件,这些插件能够允许我们立刻使用新语法,无需等待浏览器支持. 那我们怎么使用babel呢? 首先我们来了解babel基 ...
- 【清北学堂2018-刷题冲刺】Contest 8
Task 1:关联点 [问题描述] ⼆叉树是⼀种常用的数据结构,⼀个⼆叉树或者为空,或者由根节点.左⼦树.右⼦树构成,其中左⼦树和右⼦树都是⼆叉树. 每个节点a 可以存储⼀个值val. 显然,如果 ...
- 【Maven】安装配置、目录结构、配置文件、常见命令
1.下载配置maven步骤 a.windows下配置jdk的系统环境变量:java_home b.windows下配置maven的系统环境变量:maven_home或者m2_home c.window ...
- Java_myBatis入门写法
一.整体步骤 1.读取全局配置文件“SqlMapConfig.xml” 2.用SqlSessionFactoryBuilder来创建一个SqlSessionFactory 3.用创建好的SqlSess ...
- H5新特性之拖拽文件
H5新增了drag事件,在H5中拖拽是十分常见的. 可以拖拽的分为页面内的和页面外的 页面内的一般默认可以拖拽的是img和a标签 页面外的常指的是文件 上代码吧~ let zoom = documen ...
- Hadoop生态圈-基于yum源的方式部署Cloudera Manager5.15.1
Hadoop生态圈-基于yum源的方式部署Cloudera Manager5.15.1 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我之前分享过关于离线方式部署Cloudera ...
- H3C交换机端口安全技术之端口隔离的应用
H3C交换机端口安全技术---端口隔离的应用 相信大家所在公司都会有财务部门,普通员工和领导,网络工程师在配置的时候为了安全考虑,会用一些硬件上自身支持的功能区做一些安全措施.为了方便说明需求,我特意 ...
- 利用@jsonView注解来实现自定义返回字段
业务场景:比如说一个User对象,有两个字段,一个username,一个password,有一个获取用户信息的接口要返回这个User列表,但是不想要这个User列表的password字段. 还有一个接 ...
- Bleve代码阅读(一)——新建索引
引言 Bleve是Golang实现的一个全文检索库,类似Lucene之于Java.在这里通过阅读其代码,来学习如何使用及定制检索功能.也是为了通过阅读代码,学习在具体环境下Golang的一些使用方式. ...
- luogu P4162 [SCOI2009]最长距离
传送门 可以枚举两个点然后计算答案,至于是否合法,就要看可不可以通过移不超过\(t\)个箱子使得两点连通,也可以看做找一条路径使得路径上的1个数不超过\(t\) 所以可以考虑最短路,相邻的点两两连边, ...