模块和包

在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护

为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里
这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式
在Python中,一个.py文件就称之为一个模块(Module),一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块
模块是一组Python代码的集合,可以使用其他模块,也可以被其他模块使用

使用模块的好处
  1) 大大提高了代码的可维护性
  2) 利用别人写好的模块,使得编写代码不必从零开始,如Python内置的模块和来自第三方的模块
  3) 使用模块还可以避免函数名和变量名冲突
   相同名字的函数和变量完全可以分别存在不同的模块中
   因此,在编写模块时,不必考虑名字会与其他模块冲突,但也要注意,尽量不要与内置函数名字冲突

关于包(Package)
  为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)
  引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突
  假设abc和xyz这两个模块名字与其他模块冲突了,于是可通过包来组织模块,避免冲突
  方法是选择一个顶层包名,比如mycompany,这样,abc.py模块的名字就变成了mycompany.abc,xyz.py的模块名变成了mycompany.xyz
  按照如下目录存放:
    mycompany
    ├─ __init__.py
    ├─ abc.py
    └─ xyz.py


  关于__init__.py文件
    每一个包目录下面都会有一个__init__.py的文件,该文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包
    __init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是mycompany,即包名


  包内可以有多级目录,组成多级层次的包结构
    按照如下目录存放:
      mycompany
      ├─ web
      │ ├─ __init__.py
      │ ├─ utils.py
      │ └─ www.py
      ├─ __init__.py
      ├─ abc.py
      └─ xyz.py
  www.py文件的模块名就是mycompany.web.www,两个文件utils.py的模块名分别是mycompany.utils和mycompany.web.utils
  mycompany.web也是一个模块,就是mycompany.web下的__init__.py文件

注意
  1) 模块名要遵循Python变量命名规范,不要使用中文、特殊字符
  2) 模块名不要和系统模块名冲突,例如,系统自带的sys模块,自己的模块就不可命名为sys.py,否则将无法导入系统自带的sys模块
   最好先查看系统是否已存在该模块
   检查方法是在Python交互环境执行import 模块名,若成功则说明系统存在此模块

转载于:https://www.cnblogs.com/shiliye/p/10948324.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于HTML的面试题-html5/css3篇

1. html5 新增标签有哪些(或者新增的语义标签)?2. HTML5 中有哪些新特性?3. 视频有哪几种格式?这几种格式有什么区别?4. 写出你知道的层级选择符(结构性伪类选择器)5. 什么是渐进增强…

鳞翅目动物的诅咒:玩java.time

流行测验:这个小程序的输出是什么? public class DateFun {public static void main(String[] args) {long hours getHoursOfDay(LocalDate.now(), ZoneId.systemDefault());System.out.println(hours);}private static long getHoursOfDay(LocalDate …

jq 方法函数(淡入淡出,查找元素,过滤)遍历

淡入淡出:fadeIn fadeOut fadeToggle fadeTo 淡入:fadeIn(speed[,callback]) 速度和回调函数 回调函数可以写匿名函数,或者方法名不加括号。 speed 为‘slow’或 1000 毫秒数不加引号 淡出:fadeOut …

Elasticsearch的用例:灵活的查询缓存

在前两篇有关Elasticsearch用例的文章中,我们已经看到Elasticsearch 可用于存储甚至大量文档 ,并且我们可以通过Query DSL使用Lucene的全文功能访问那些 文档 。 在这篇较短的文章中,我们将把两个用例放在一起,以了解读取繁重的应…

Vue底层架构及其应用(上)转

https://mp.weixin.qq.com/s?__bizMzIzNjcwNzA2Mw&mid2247486427&idx1&sn61f9579bbe1dfe26da4b53eb538fee13&chksme8d28643dfa50f557c56ce8b5bc9b0597a157a20791e21b1812fe2a30ff4cf2c813608473b43&mpshare1&scene23&srcid#rd 一、前言 市面上有很…

jquery笔记一:下载安装、语法、选择器、遍历选择元素的方法、jQuery动画

目前 jQuery 兼容于所有主流浏览器, 包括 IE 6!开发时常用 jquery.js,上线用 jquery.min.js。 jq插件 目前jQuery有三个大版本: (1)1.x.x: 兼容ie6,7,8,使用最为广泛,官网只做BUG维护&#xff…

jquery简介 each遍历 prop attr

一、JQ简介 jQuery是一个快速、简洁的JavaScript框架,它封装了JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。 装载的先后次序:  jQuery封装库在上&#xff0…

如何让Visitor变得可爱1

本文转自:http://www.cnblogs.com/idior/archive/2005/01/19/94280.html 在wayfarer的文章中提到了如何利用visitor模式实现添加新的功能。如他所说,在实际过程中显的不是那么可爱。不过他为我们提供了一个可行的解决方案,本文将在此基础上使…

EJB 3.x:生命周期和并发模型(第1部分)

Java EE组件生命周期和与并发相关的详细信息对于经验丰富的专业人员而言可能不是新知识,但是对于初学者而言,这可能需要花费一些时间。 就EJB而言,了解其生命周期 (以及相关的并发场景)对于确保使用EJB的正确用法和解…

链表定义

public class Node {//节点内容,成员变量int data;//下一个节点,定义成员变量,类型为Node类型,不进行初始化Node next;//定义构造函数,获取参数data的值public Node(int data) {this.datadata;}//为节点追回节点public…

单独使用 laydate 日期时间组件

layui 日期和时间组件官方文档 需要注意几点: 下载压缩包后,复制整个 laydate 文件夹放到项目中,里面的文件不要改动位置,否则会报错;在移动端使用时,要给 input 添加 readonly 属性,否则点击…

从零开始学习SVG

1 什么是SVG? MDN中的定义是:SVG即可缩放矢量图形(Scalable Vector Graphics,SVG),是一种用来描述二维矢量图形的 XML 标记语言。 简单地说,SVG 面向图形,HTML 面向文本。SVG 与 Flash 类似&am…

Flash/Flex学习笔记(39):弹性运动

动画中的弹性运动 从视觉效果上接近 物理经典力学中的单摆运动或弹簧(胡克定律FKx)振动 先看下面的模拟演示: 规律: 小球先从出发点(初始为最左侧)向目标点(中心点)加速狂奔,奔的过程中速度越来越大,但加速度越来越小,…

layui 关于layDate设置时间限制问题

前面是尝试结果,有兴趣的可以康康,赶时间的可以直接翻到底下 ----->直达车 因为只有一个页面,没什么标准,所以自己就使用了layui的时间控件,并且作为独立组件。 第一次尝试 - 使用 min 一开始只想让结束时间有个…

QQ聊天记录快速迁移

QQ聊天记录快速迁移 在工作中大家经常会用到QQ来沟通,但是很多时候在其它设备上登录QQ就无法查看到之前的聊天记录和图片,这是因为电脑上的QQ聊天记录一般都是保存在电脑本地硬盘里,所以我们在换设备登录QQ后,是无法查看到之前电脑…

DOM相关知识点

内容待补充。。。 DOM相关注意题目&#xff1a;DOM的最小组成单位叫做 //节点 NodeDOM 有自己的国际标准&#xff0c;目前的通用版本是 //DOM 3DOM 树的根节点 //HTML元素 Element 的 NodeType 值为 //1 和Node. ELEMENT_NODE<div idx></div> x的值 //就是这…

Hawtio和Jolokia的休眠统计

企业Java的很大一部分处理数据。 在企业设置中使用数据的所有不同方式中&#xff0c;仍然存在使用任何种类的O / R映射的行之有效且广泛教授的方法。 JPA标准使每个人都可以轻松使用它&#xff0c;并且它也应该是可移植的。 但是&#xff0c;我们不要谈论迁移细节。 O / R映射的…

laydate 时间控件去掉秒以及解决在移动端不能滑动的问题

一、时间控件去掉秒&#xff0c;保留时分 二、时间控件在移动端不能滚动 一、时间控件去掉秒&#xff0c;保留时分 方法一&#xff1a;使用 ready 回调函数 ready 控件在打开时触发。打开控件时让秒消失。 <script> laydate.render({elem: #endTime, //指定元素trigg…

Entity Framework Code First属性映射约定 转载https://www.cnblogs.com/libingql/p/3352058.html

Entity Framework Code First属性映射约定 Entity Framework Code First与数据表之间的映射方式有两种实现&#xff1a;Data Annotation和Fluent API。本文中采用创建Product类为例来说明tity Framework Code First属性映射约定的具体方式。 1. 表名及所有者 在默认约定的情况下…

应用的大数据:医疗保健的经济学

这次我的标题不太挑衅&#xff0c;因为我的上一篇博客文章&#xff08;http://brianoneill.blogspot.com/2014/04/big-data-fixes-obamacare.html&#xff09;显然煽动了政治大战。 在本文中&#xff0c;我希望通过详细介绍大数据如何以无党派方式帮助我们的医疗保健系统来避免…