当前位置: 首页 > news >正文

模块和包

模块:别人写好的函数、变量、方法,放在一个文件里(这个文件可以被我们直接使用)这个文件就是个模块

    .py dll文件  zip文件

  自己创建一个py文件,给他起一个符合变量名命名规则的名字,这个名字就是模块名

模块的导入:

模块导入的过程中发生了什么

  找到这个模块

  判断这个模块是否被导入过了

  如果没有被导入过

    创建一个属于这个模块的命名空间

    让模块的名字指向这个空间

    执行这个模块中的代码

import 模块名

  模块的导入想当于这个模块所在的文件被导入,模块的多次导入不会重复执行。

  命名空间

  为模块起别名  as  语句  (起了别名之后,使用这个模块就只能用这个别名了)

  一行导入多个模块:(顺序)内置、第三方、自定义

from import    也会执行文件,但是import了什么,就只能用什么

  命名空间  名字引用模块中的名字

  为导入的名字起别名

  一行导入多个名字

  *和__all__的关系:__all__只能约束*导入变量的内容

    from my_module import * (默认是导入所有,但是__all__=[“a”]列表没有的就不会被导入)

模块引用中的情况:

  1.模块的循环引用***

    模块之间不允许循环引用

  2.模块的加载与修改*

    已经被导入的模块发生了修改,是不会被感知的

    要想修改的模块被正在运行中的程序感知到,重启这个程序

  3.把模块当成脚本执行*****

    执行一个py文件的方式:

      1.在cmd执行,在pytho执行:直接执行-以脚本的形式

      2.导入这个文件

    脚本:直接运行的文件,都是py文件,能独立的提供一个功能,能自主完成交互

    模块:导入这个文件 ,都是py文件,能够被导入调用这个功能,不能自主交互

    if __name__ == "__main__"    当文件被当做脚本的时候

      代码            当文件被当成模块导入的时候  __name__ =="模块的名字"

    下载这里面的代码只有这个文件被当做脚本执行的时候才会执行

  4.模块的搜索路径*****

    和被当做脚本执行的文件,同目录下的模块,可以被直接导入

    除此之外其他路径下的模块,在被导入的时候需要自己修改sys.path列表

  包:文件夹中有一个__init__.py文件

  包:是几个模块的集合

直接导入包,需要通过设计init文件,来完成导入包之后的操作

导入一个包

  不意味着这个包下面的所有内容都是可以被使用的

  导入一个包到底发生了什么

    相当于执行了这个包下面的__init__.py文件

绝对导入:

  在执行一个py脚本的时候,这个脚本以及和这个脚本同级的模块中只能用绝对导入

缺点:

  所有的导入都要从一个根目录下往后解释这个文件夹之间的关系

  如果当前导入包的文件个被导入的包的位置关系发生了变化,那么所有的init文件都要做相应的调整

相对导入:

  不需要去反复的修改路径

    只要一个包中的所有文件夹和文件的相对位置不发生改变

  也不需要去关心当前这个包和被执行的文件之间的层级关系

缺点:

  含有相对导入的py文件不能直接被执行

  必须放在包里被导入的调用才能正常使用

转载于:https://www.cnblogs.com/qq849784670/p/9525468.html

相关文章:

  • Idea+maven+scala构建包并在spark on yarn 运行
  • linux基础语法
  • 谈谈如何通过linux系统RHCE考试
  • 漫谈计算机组成原理(八)原码、补码、反码
  • 【c】插入排序
  • 20180824Noip模拟赛10分总结
  • jquery 取id模糊查询
  • DBA:快速了解MySQL及语法
  • 回顾·数据分析的势道术
  • WPF中ListBox滚动时的缓动效果
  • MySQL事务
  • javaOOM该分析dump文件而不是看异常log日志原因
  • DNS 工作原理是什么,域名劫持、域名欺骗、域名污染又是什么
  • NOIP2011DAY1T3 Mayan游戏
  • 1109 Group Photo
  • [case10]使用RSQL实现端到端的动态查询
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • ➹使用webpack配置多页面应用(MPA)
  • 08.Android之View事件问题
  • 10个最佳ES6特性 ES7与ES8的特性
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • C++类中的特殊成员函数
  • ESLint简单操作
  • github指令
  • JAVA_NIO系列——Channel和Buffer详解
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Java程序员幽默爆笑锦集
  • jquery ajax学习笔记
  • Making An Indicator With Pure CSS
  • spring security oauth2 password授权模式
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • webpack入门学习手记(二)
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 搭建gitbook 和 访问权限认证
  • 动态规划入门(以爬楼梯为例)
  • 多线程事务回滚
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 容器服务kubernetes弹性伸缩高级用法
  • 数组的操作
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 网络应用优化——时延与带宽
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 追踪解析 FutureTask 源码
  • gunicorn工作原理
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • ​什么是bug?bug的源头在哪里?
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (AngularJS)Angular 控制器之间通信初探
  • (Java数据结构)ArrayList
  • (LeetCode 49)Anagrams
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (力扣)1314.矩阵区域和
  • (一)WLAN定义和基本架构转