导模块的细节:(跨文件导入模块 &模块的两种执行方式) | 包的概念与使用 | 包中的相对导入语法
今日内容
包:
1. 导入模块的细节
2. 包的概念与使用
3. 包中的相对导入语法
跨文件夹导入模块
1. 假设有一个文件夹a ,a 的下面有一个ma 的模块,如果a文件夹所在目录在环境变量,a文件夹中的ma 模块可以被以下方式导入:
import a.ma | from a import ma
2. 基于第一条,如果文件夹a 下有一个b文件夹,文件夹下有一个mb模块,如果a文件夹所在的目录在环境变量,a文件夹中的b文件夹内的mb模块就可以被以下方式导入:
import a.b.mb | from a.b import mb
3. 基于第二条,如果mb模块中还要一个叫abc的名字需要导入,如果a文件夹所在目录在环境变量,那么a文件中的b文件夹的mb模块中的abc名字导入的方式是:
import a.b.mb.abc # 此方法是错误的 ,符号. 的 左侧必须是文件夹
from a.b import mb.bbb # 此方法也是错误的,符号. 的左侧必须是文件夹
from a.b mb import abc # 使用此方法才能找到 abc
模块的两种被执行方式
总结:
1. 一个py文件作为自执行文件,__name__变量的值为'__main__'
2. 一个py文件作为模块被导入执行,__name__变量的值为'文件(模块)名'

如何区别两种方式: 有一个可以让一个文件拥有自执行,也能被导入执行两种共存的方法。
需要在需要的py文件中写:
if __name__=='__main__' # 如果模块是直接运行的,则代码块会被直接运行,如果模块是被导入的,则代码块不被运行
包
包: 一系列模块的集合体,用文件夹来管理一系列有联系功能的模块,该文件夹我们就称之为包,文件夹名就是包名
包与普通文件夹存在区别:包的文件夹中一定存在一个__init__.py 文件
-----在py2中:__init__.py 必须创建
-----在py3中:__init__.py建议创建,不创建系统会自动创建
__init__.py文件
1. 产生一个全局名称空间,提供给包,就代表包的名称空间
2. 管理,包可以使用符号 . 直接使用的名字
导入包所完成的三件事
1. 编译形成包中__init__.py文件的pyc文件
2. 执行__init__.py 文件,形成一个全局名称空间,将__init__.py文件中所有名字存放其中,该名称空间就代表包的空间
3. 在导包的文件中,产生一个与包名相同的名字,指向包的名称空间 (__init__.py文件的全局名称空间)
直接使用包中模块
如果只是想作为普通文件夹,py3中可以省略__init__文件,本质上文件夹也是包
导入的手段:1.指名道姓到某一个模块 2. 指名道姓到某一个模块中的名字
包的管理
在包中采用相对导入管理模块或模块中的名字
在包的__init__.py文件或是包中任意一个模块中
符号 . 代表的是当前文件所在的目录
符号 . . 代表当前文件所在的上一级目录
注: 语法包不能出包,因为包外的文件都可以自执行,但可以使用 . 导入的文件是不能自执行的
导模块的细节:(跨文件导入模块 &模块的两种执行方式) | 包的概念与使用 | 包中的相对导入语法的更多相关文章
- python常有模块:模块、引入语法、两种执行方式、模块搜索顺序
今天主要讲了以下几点:一.模块三问.定义及分类二.import和from的语法三.文件的两种执行方式及搜索顺序四.内置函数 一.模块.import和from的语法 1.什么是模块 模块是一堆功能函 ...
- Java学习-014-文本文件写入实例源代码(两种写入方式)
此文源码主要为应用 Java 读取文本文件内容实例的源代码.若有不足之处,敬请大神指正,不胜感激! 第一种:文本文件写入,若文件存在则删除原文件,并重新创建文件.源代码如下所示: /** * @fun ...
- Windows校验文件哈希hash的两种常用方式
大家经常都到哪儿去下载软件和应用程序呢?有没想过下载回来的软件.应用程序或资源是否安全呢?在 Windows 10 和 Office 2016 发布当初,很多没权限的朋友都使用第三方网站去下载安装映像 ...
- 将HTML页面自动保存为PDF文件并上传的两种方式(一)-前端(react)方式
一.业务场景 公司的样本检测报告以React页面的形式生成,已调整为A4大小的样式并已实现分页,业务上需要将这个网页生成PDF文件,并上传到服务器,后续会将这个文件发送给客户(这里不考虑). 二.原来 ...
- 文件批量上传-统一附件管理器-在线预览文件(有互联网和没有两种)--SNF快速开发平台3.0
实际上在SNF里使用附件管理是非常简单的事情,一句代码就可以搞定.但我也要在这里记录一下统一附件管理器能满足的需求. 通用的附件管理,不要重复开发,调用尽量简洁. 批量文件上传,并对每个文件大小限制, ...
- Android Studio导入Eclipse项目的两种方法
Android Studio导入Eclipse项目有两种方法,一种是直接把Eclipse项目导入Android Studio,另一种是在Eclipse项目里面进行转换,然后再导入Android Stu ...
- javascript文件夹选择框的两种解决方案
javascript文件夹选择框的两种解决方案 解决方案1:调用windows 的shell,但会有安全问题. * browseFolder.js * 该文件定义了BrowseFolder()函数,它 ...
- Java学习-013-文本文件读取实例源代码(两种数据返回格式)
此文源码主要为应用 Java 读取文本文件内容实例的源代码.若有不足之处,敬请大神指正,不胜感激! 1.读取的文本文件内容以一维数组[LinkedList<String>]的形式返回,源代 ...
- Django学习——ajax发送其他请求、上传文件(ajax和form两种方式)、ajax上传json格式、 Django内置序列化(了解)、分页器的使用
1 ajax发送其他请求 1 写在form表单 submit和button会触发提交 <form action=""> </form> 注释 2 使用inp ...
随机推荐
- jar包上传本地maven仓库
执行mvn install:install-file -Dfile=D:\software\jave-1.0.2\jave-1.0.2\jave-1.0.2.jar -DgroupId=it.saur ...
- 【Winfrom-Button】 重写Button,去掉获取焦点时的边框
Winfrom Button 去掉获取焦点时的边框: 自定义一个Button,重写ShowFocusCues方法 /// <summary> /// 去掉获取焦点的边框 /// </ ...
- java-并发编程之fork/join框架
Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架.Fork/Join框架要完成两件事情: 1.任务分 ...
- java源码学习(一)String
String表示字符串,Java中所有字符串的字面值都是String类的实例,例如"ABC".字符串是常量,在定义之后不能被改变,字符串缓冲区支持可变的字符串.因为 String ...
- WPF之Treeview实现MVVM双向绑定
Treeview分别有两个数据模板HierarchicalDataTemplate(层级数据模板)和DataTemplate(数据模板),分别应用于生成子数据项和普通数据项. 在使用过程中,如果对两个 ...
- Lock和synchronized的区别
总结来说,Lock和synchronized有以下几点不同: 1)Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现: 2)synchroni ...
- 2019 7.6 T2 虫洞
虫洞(conch) [题目描述] HZY 现在在数轴原点处,她想跑到 2000001 这个点上.听说各路 神犇暑假里都在健♂身,所有 HZY 也想不要只是简单地跑步,于是她 决定在这条数轴上造虫洞,具 ...
- getFieldDecorator用法(三)——Table增删改
后台管理系统常用到表单的增删改,这里也做了个封装 例如:user/index.js import React from 'react' import { Card, Button, Table, Fo ...
- Hive运行原理--JOIN
对于 JOIN 操作: INSERT OVERWRITE TABLE pv_users SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON ...
- js中的事件委托技术
1.什么是事件委托:通俗的讲,时间就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个时间本来是加在某些元素上的,然而你却加到别人身上来做,完成这 ...