11 模块、模块的搜索顺序、__file__内置属性、__name__属性
模块的概念
一个python文件就是一个模块。
模块名同时也是一个标识符,需要符合标识符的命名规则。
在模块中定义的全局变量、函数、类 都是个外界提供的直接使用的工具。
模块就好比工具包,要想使用一个模块,需要先导入它。
模块的导入方式
模块在被导入时,模块中没有任何缩进的代码,会被完全执行一遍。
推荐方法
import 模块名1
import 模块名2
不推荐方法
import 模块名1,模块名2
模块的别名
模块导入后,可以给模块起别名,别名遵循大驼峰命名规则。
格式: import 模块名 as 别名
模块导入的顺序规范
按以下优先级导入
- 官方标准模块
- 第三方模块
- 应用程序模块
部分工具导入(局部导入)
如果指向导入某个模块中的部分工具(全局变量、函数、类),则可以使用部分工具导入方法。
优点:导入的工具可以直接使用,无需使用 模块名.的方法调用。
格式: from <模块名> import <工具名>
工具的别名:
如果导入了两个名字相同的工具,则最后导入的会覆盖前面导入的。为了解决这个问题,也可以使用as关键字来给导入的工具起别名。
别名遵循标识符命名规则。
例如:
from xh_25_测试模块1 import module_name as tools1
通过form <模块名> import * 导入全部工具(不推荐!了解即可)
通过此方法可以模块的全部工具,但是不推荐!
因为工具重名覆盖不会有任何提示,不便于问题的排查。
模块的导入顺序
- 在python系统中,内置有系统模块方便用户使用(例如random模块)。
- 在导入模块时,按照:当前文件目录、python系统模块目录 的顺序进行搜索。
- 由于存在系统模块目录,在给模块起名时,不要和系统模块名相同。
__file__内置属性
使用:print(模块名.__file__)可输出模块的所在绝对路径。
如果直接print(__file__)则输出当前python文件的绝对路径。
__name__与模块测试代码块
测试代码块
在开发中,通常一个模块中都会写有测试代码块,这些代码块通常会将测试结果输出到控制台。
而导入模块时,模块中没有任何缩进的代码,会被完全执行一遍。
但对于一个模块来说,我们只需要它的工具,并不需要它的测试代码输出测试结果到控制台。
为了解决这个问题,我们需要使用到__name__内置属性。
__name__
__name__属性储存的是文件的模块名。对于当前模块下对它进行的调用,它的值都是字符串"__main__"。
但是!如果这个模块被导入到其它模块,此时__name__属性的值则为被调用模块的值。
解决导入模块时测试代码块输出的问题
利用__name__属性的特性,我们可以使用一个if语句来解决这个问题。
在被导入的模块中,使用if 判断__name__的值,如果是"__main__"(在此模块测试时),则执行if下的测试代码,否则(被导入时),就不执行。
如:
if __name__ == "__main__":
"""if下的区域即为测试区域,测试代码就写在这里"""
print("测试代码正常执行")
11 模块、模块的搜索顺序、__file__内置属性、__name__属性的更多相关文章
- Python第八天 模块 包 全局变量和内置变量__name__ Python path
Python第八天 模块 包 全局变量和内置变量__name__ Python path 目录 Pycharm使用技巧(转载) Python第一天 安装 shell 文件 Pyt ...
- python面向对象的基础语法(dir内置函数、self参数、初始化方法、内置方法和属性)
面相对象基础语法 目标 dir 内置函数 定义简单的类(只包含方法) 方法中的 self 参数 初始化方法 内置方法和属性 01. dir 内置函数(知道) 在 Python 中 对象几乎是无所不在的 ...
- JSP内置对象和属性
JSP内置对象和属性列举如下: 1.request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应.它是HttpServletRequest类的 ...
- 【python基础语法】OS模块处理文件绝对路径,内置的异常类型、捕获、处理(第9天课堂笔记)
import os """ 通过文件的路径去打开文件 相对路径:相对当前的工作路径去定位文件位置 .:代表当前路径 ..:代表上一级路径(父级路径) 绝对路径:相对于电脑 ...
- 11 The Go Memory Model go语言内置模型
The Go Memory Model go语言内置模型 Version of May 31, 2014 Introduction 介绍 Advice 建议 Happens Before 在发生之前 ...
- EassyUI内置方法与属性
Jquery插件 easyUI属性汇总 作者: 字体:[增加 减小] 类型:转载 时间:2011-01-19我要评论 找了个时间看了下EasyUI插件,对它的插件感觉是很舒服,特地把Easy UI的大 ...
- 前端笔记之JavaScript面向对象(二)内置构造函数&相关方法|属性|运算符&继承&面向对象
一.复习 1.1复习上下文 函数的调用方式 上下文 fun() window obj.fun() obj box.onclick = fun box setInterval(fun,1000) set ...
- 34、JavaScript面向对象(内置构造函数&相关方法|属性|运算符&继承&面向对象)
一.面向对象 1.1 this的指向问题 要看清楚最终的函数调用者是谁. IIFE也被当做函数直接运行,IIFE的this都是window对象 函数的arguments是类数组对象,比如传入的第0项参 ...
- JavaScript 常用内置对象(字符串属性、Math对象、Array数组对象)
1.字符串属性 <script> var test_var = "I Iove you"; console.log(test_var.charAt(3)) // ...
随机推荐
- [Linux] 启用win10下Linux子系统
转载请注明出处:https://www.cnblogs.com/lialong1st/p/12004080.html 最新的win10引入了Linux子系统,这样就免去了安装虚拟机或者双系统的麻烦. ...
- 利用原生JS实时监听input框输入值
传送门https://www.cnblogs.com/lantinggumo/p/7636715.html 传送门https://www.cnblogs.com/nailc/p/8572226.htm ...
- 第07组 Alpha冲刺(1/6)
队长:杨明哲 组长博客:求戳 作业博客:求再戳 队长:杨明哲 过去两天完成了哪些任务 文字/口头描述:完成了,网页后端的大部分工作.负责了很大一部分的后端工作. 展示GitHub当日代码/文档签入记录 ...
- mysql innodb与myisam存储文件的区别
myisam: .frm: 存储表定义 .myd(MYData):存储数据 .MYI(MYindex):存储引擎 innodb: .frm:存储表定义 .idb:存储数据和索引,在同一个文件中
- Kubernetes 下零信任安全架构分析
点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 杨宁(麟童) 阿 ...
- keep-alive 实现从列表页到详情页,然后再回到列表页并保持原来列表页的页码数,并且只刷新数据
思路: keep-alive应用场景介绍 <keep-alive> 不会在函数式组件中正常工作,因为它们没有缓存实例.结合router,缓存部分页面 activated 和 deactiv ...
- 快速克隆网站利器-teleport ultra
快速克隆网站利器-teleport ultra 一.下载 二.操作步骤 第一步:打开这个软件 第二步点击file.下拉选择 New Project Wizred,弹出如下下拉框 这里我们使用第一个或者 ...
- 003 接触elasticsearch的Restful Api【快速入门】
在学习的时候,直接参看网上的材料,总是会有各种问题,也可能是版本的问题的差异,也可能是本来就有问题,所以,当存在问题的时候从官网的文档上进行学习. 其中7.2版本的文档是:https://www.el ...
- Docker 记一次 docker-compose 完整实践(转)
本文介绍docker-compose实践时的一些疑问与解决方案, 可能对新手略有帮助, 因此整理成文. 有不妥之处欢迎指摘! Q1: docker-compose 如何安装? A1: https:// ...
- 在shell中判断hive查询记录数大小
用途: 根据查询到结果数量来判断,是否需要再执行下个脚本. 1. 查询语句script.q脚本如下: ) as count from test; 2. shell脚本如下: 这里注意hive语句需要 ...