Python学习笔记(十):包、模块

2023-10-29

一、包、模块

    Python中的包相当于文件夹,模块就是.py文件

    不同包下有相同名称的模块时,为了区分,可在模块里加上“包名.模块名”路径,这个路径叫做命名空间

    注:如果想让一个普通的文件夹变为包,则需要在这个文件夹内添加__init__.py文件,init前后各两个下划线,此文件的路径不是包名.文件名,而是包名

二、导入其它模块的变量

包设置如下图

p5文件夹下新增c1.py

 

a = 2
b = 3
c = 4

 

p4文件夹下新增c2.py

      1)import 路径.模块名

         c2.py           

import p4.c1
print(T.C1.a)

     2)import 命名空间.模块名 as 标识名

 

import p4.c1 as c
print(c.a)

      引入其它模块运行后,会由python解释器自动生成一个__pycache__文件夹,里面包含引入的模块名.cpython-36.pyc文件

    3) 引入变量

        注:import只能引入模块,不能直接引入模块下的变量,可以使用“from 命名空间.模块名 import 变量名”来引入变量

        A.只引入需要的变量

        c2.py

 

from p5.c1 import a
from p5.c1 import b
print(a)
print(b)

        B.引入全部变量

 

from p5.c1 import *
print(a)
print(b)
print(c)

  C.使用from  命名空间 import 模块名,将模块看作一个变量来引入

c2.py

     

D.在c1.py中加入内置变量__all__,定义只可导入的变量

c1.py

 

__all__ = ['a', 'b']
a = 2
b = 3
c = 4

c2.py

 

from p5.c1 import *
print(a)
print(b)
print(c)

此时import *,只能导入__all__里含有的变量a和b,不能导入c,因此运行会报错

    print(c)

NameError: name 'c' is not defined

注:使用内置变量后,只是使用“from ... import *”时,只能导入内置变量的元素,未被归入内置变量的元素,仍可单独导入成功,即

c2.py

 

from p5.c1 import *
from p5.c1 import c
print(a)
print(b)
print(c)

此时会运行成功,打印

2
3

4

三、vscode的小技巧

3.1隐藏__pycache__文件夹,在用户设置中搜file.exclude,加入"**/__pycache__":true,即可隐藏该文件夹

 

3.2换行

    注:python中建议一行最多有80个字符

3.2.1  可以在一行的末尾加入“\”

3.2.2 将需要换行的内容用()括起来

3.3将可执行文件作为一个普通模块来执行,可以使用命令: python -m 命名空间.模块

     不使用-m时,python后面加的是物理路径 

四、__init__.py文件

4.1 一个文件夹下有__init__.py文件时,这个文件夹就会变为包,如果没有此文件就是一个普通的文件夹

4.2 当一个包被导入时,__init__.py文件会被自动执行

      在p5下添加__init__.py文件,并加入一行打印信息代码,运行c2.py

        注:一般在__init__.py文件添加初始化信息

4.3 可以在文件中添加内置变量,规定哪些模块可以被引出

在p5文件夹下添加c3.py文件

__init__.py中,添加内置变量,规定只可对c1导出

c2.py文件中,导入c3,并执行

               

注:__init__.py中的内置变量同样只对 “from...import *”起作用,单独导入未归入内置变量的模块是可以执行的

4.4 可以在包的__init__中批量导入库、模块,将需要引入这些库、模块的.py中添加一行导入这个包的代码,就可以了

示例,p4下新建一个c4.py,c2与c4都需要导入相同的库,可以将这些库添加在__init__.py中

c4.py中可以不重复导入,直接打印sys的信息

注:1.包和模块不会重复导入

      2.要避免循环导入,如c1与c3互相导入,形成了一个循环,运行c2.py,会报错

五、内置变量

注:模块中除了人为定义的一些变量外,还有一些其它变量是已经被定义好的

c3.py中打印dir()信息,dir()可以输出所有的变量信息

打印出的带有双下划线的变量是系统定义好的内置变量

5.1__name__:模块的命名空间+模块名

    注:当__name__的值为__main__时,此文件为入口文件

     可以在模块中加入以下代码,代表当前文件为入口文件执行时,可以运行的代码

        if __name__ == '__main__'

                pass

5.2__package__:模块的包名

    注:入口文件不属于任何包,所以入口文件的__package__没有值,为nonetype

5.3__doc__:模块中的注释

5.4__file__:模块的物理路径,即在电脑中的存储路径

     注:__file__的值与执行全集python的路径有关

六、相对导入和绝对导入

6.1 顶级包:可执行文件所在的包,是其引入的其它模块的顶级包

6.2 绝对路径:从顶级包开始往下查找

      如:

6.3 相对路径:单独使用import不能使用相对路径,只能用于“from... import 模块”的格式

        “.”:表示当前目录

        “..”:表示上一级目录

        “...”:表示上上级目录

        依次类推

        注:1.执行文件不能使用相对路径,因为相对路径能找到模块是根据内置变量__name__去定位,而执行文件的__name__值会变为__main__,此时无法定位

              2.相对路径不能导入与顶级包同级或超出顶级包的模块,若要执行,则需要在执行文件的上一级包执行

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python学习笔记(十):包、模块 的相关文章

  • 如何在Jenkins构建完代码后,能够查看HTML Report?

    有同学说想要在Jenkins构建完代码后就能查看构建后的结果报告 不知道怎么配置 这里我详细的说明一下步骤 对于想学习的同学有很大帮助 本次说明仅针对 python3 request unittest框架的案例作详细说明 想要完成这项配置过
  • centos7安装python3及问题解决

    centos7安装python3及问题解决 Centos7中默认的Python版本为2 7 在2020年python官方将不再支持2 7版本的python 所以使用3 x版本的python是必要的 下载地址 https www python
  • Python3 中 bytes 和 string 之间的互相转换

    因为这是原来不知道 Markdown 时写的文章 富文本编辑器不知道怎么用脚注 所以参考资料显得有些孤立了 见谅 Table of Contents 前言 创建 bytes 型数据 创建字符串 相互转换 string to bytes 按
  • Win7平台Python3使用impyla连接Hive遇到的坑

    环境硬件配置及Hadoop Hive版本 此博客置顶文章中有 安装步骤 pip install pure sasl Looking in indexes https pypi tuna tsinghua edu cn simple Coll
  • 【2019.05】JS逆向——破解百度翻译参数(sign)爬虫 超级详细

    有时间了打算把有道 百度 Google翻译都搞一遍 填坑百度翻译 这篇与有道那篇操作基本一致 有可能写的没有那篇清楚 大家也可以观摩一下上一篇 2019 05 JS逆向 破解有道翻译爬虫参数 sign 一 分析请求参数 打开地址 https
  • 详细!PyCharm连接MySQL数据库教程+心得

    一家懂得用细节留住客户的3年潮牌老店我必须支持 luyao1931 第一步 安装MySQL 下载地址 https dev mysql com downloads mysql 下载完后 我们将 zip 包解压到相应的目录 这里我将解压后的文件
  • 使用 selenium 连接已经打开的 chrome 浏览器

    1 方法一 新建文件夹test 进入chrome exe 目录 打开CMD 输入 chrome exe remote debugging port 9999 user data dir D test 弹出 浏览器框 pycharm运行脚本如
  • ERROR: No matching distribution found for Django 报错解决

    ERROR No matching distribution found for Django 报错解决 今天安装一个 python 依赖时 执行 pip install r requirements txt后 界面出现ERROR No m
  • LeetCode 刷题记录14. 最长公共前缀

    题目描述 编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 说明 示例 1 输入 strs flower flow flight 输出 fl 示例 2 输入 strs dog racecar car 输出 解释
  • pycharm所有版本 http://www.jetbrains.com/pycharm/download/previous.html 打开激活窗口 选择 Activate new license

    pycharm所有版本 http www jetbrains com pycharm download previous html 打开激活窗口 选择 Activate new license with License server 用li
  • 基于opencv的家居智能安防机器视觉系统

    基于opencv的家居智能安防机器视觉系统 关键词 Windows 树莓派 python opencv 1 写在前面的话 大学4年很快过去了 因为疫情原因我们从大四上学期结束之后直接跳到了大学的尾声 毕业设计 毕业答辩 毕业的环境 回顾整个
  • Python3之基本数据类型总结

    日期 2019年12月15日 作者 Commas 注释 学习就是为了忘记 总结一下python3的基本数据类型相关的知识 如果您想了解更多有关Python的知识 那么请点 我的Python目录 文章目录 一 变量在内存中的存储 二 内置函数
  • Linux内存精确统计工具

    1 ps mem介绍 ps mem是一个可以帮助我们精确获取 Linux 中各个程序核心内存使用情况的简单python脚本 它会分别计算一个程序私有内存总量和共享内存总量 并以更准确的方式给出了总的内存使用量 2 安装方式 包管理器 pip
  • python中lambda语法格式及实例

    Python 3中的Lambda函数的语法格式如下 lambda 参数列表 表达式Lambda函数以关键字lambda开始 后面是参数列表 参数列表可以包含任意数量的参数 但只能有一个表达式 参数列表的语法和函数定义的参数列表语法相同 可以
  • Python3 PyQt5 实现文件打开及保存

    coding utf 8 Form implementation generated from reading ui file filemanage ui Created by PyQt5 UI code generator 5 12 2
  • python3 with.py

    模块 python3 with py 参考 https docs python org zh cn 3 reference compound stmts html with https docs python org zh cn 3 ref
  • Python3 如何优雅地使用正则表达式(详解四)

    更多强大的功能 到目前为止 我们只是介绍了正则表达式的一部分功能 在这一篇中 我们会学习到一些新的元字符 然后再教大家如何使用组来获得被匹配的部分文本 更多元字符 还有一些元字符我们没有讲到 接下来小甲鱼一一为大家讲解 有些元字符它们不匹配
  • python3 No module named 'PIL'

    在python3 scrapy框架已经安装好的情况下 还是出现了 python3 No module named PIL 在Python3下 PIL已经被Pillow替代了 所以只需要安装Pillow就可以了 使用命令 pip3 insta
  • Python3 如何优雅地使用正则表达式(详解五)

    非捕获组命名组 精心设计的正则表达式可能会划分很多组 这些组不仅可以匹配相关的子串 还能够对正则表达式本身进行分组和结构化 在复杂的正则表达式中 由于有太多的组 因此通过组的序号来跟踪和使用会变得困难 有两个新的功能可以帮你解决这个问题 非
  • python request要求接口参数必须是json数据

    Reqeusts支持以form表单形式发送post请求 只需要将请求的参数构造成一个字典 然后传给requests post 的data参数即可 data参数的格式如下 content type在header中设置 1 data为dict时

随机推荐

  • C++数组

    C 支持数组数据结构 它可以存储一个固定大小的相同类型元素的顺序集合 数组是用来存储一系列数据 但它往往被认为是一系列相同类型的变量 一维数组 一维数组定义的三种方式 1 数据类型 数组名 数组长度 2 数据类型 数组名 数组长度 值1 值
  • 总经理、总裁、总监、首席执行官,谁最了不起?

    总经理 总裁 总监 首席执行官 谁最了不起 中国的 头衔贬值 日趋严重 在中国 近来突然发现身边多了很多只有数名员工的 总裁 或者只管记帐的 财务总监 当然 在中国想要办点儿事 依靠个人的权限与力量是很关键的 因此也造成了这种刻意显示 自己
  • 如何把Eclipse改成中文版

    一 打开浏览器 输入http www eclipse org babel downloads php 如图所示 Babel Language 开头的一栏下面就是各个eclise版本的语言包 此处以Indigo版为例 二 目标锁定 Babel
  • Python 录入学生信息 提示用户在控制台输入3个学生的信息,学生信息包含姓名、年龄

    需求 按照以下要求完成代码的编写 第一步 录入学生信息 1 提示用户在控制台输入3个学生的信息 学生信息包含姓名 年龄 2 要求 封装录入单个学生信息的函数 并返回学生的信息 第二步 展示学生列表信息 1 封装打印学生信息的函数 格式要求如
  • sql sever——创建数据库

    创建数据库 并且指定存储数据库的主数据文件和日志文件 USE master GO CREATE DATABASE BOOK ON PRIMARY 主数据文件组primary NAME book data 主数据文件逻辑文件名 FILENAM
  • 力扣练习题(数组中数据反转)

    力扣练习题 数组中数据反转 要求 int arr 12 23 34 45 56 67 78 89 90 变为 int arr 90 89 78 67 56 45 34 23 12 思路 1 定义一个数组用静态初始化完成元素的初始化 2 循环
  • 剑指 Offer 39. 数组中出现次数超过一半的数字--java解法和心得

    class Solution public int majorityElement int nums 给数组排序 Arrays sort nums 排序后所找的元素比在中间 return nums nums length 2 拓展解法 摩根
  • 线程中断标志位 interrupt()、interrupted()、isInterrupted() 的认识

    常见问题 首先你是怎么去关闭一个开启的线程 调用中断方法之后 线程就立即停止运行吗 带着这两个问题探讨一下 主要围绕着这三个方法讲述 interrupt interrupted isInterrupted 归类为中断 什么是中断标识位 首先
  • 在js中forEach中使用try catch捕获异常

    forEach跳出循环使用try catch 这是我们都知道的 但是今天使用的时候发现出了问题 一 forEach中使用try catch捕获异常 如下图 1 正常情况下try catch是可以捕获到throw里面的内容 并且不会报错 程序
  • 二进制部署K8S

    目录 一 环境准备 1 常见的k8s部署方式 2 关闭防火墙 3 关闭selinux 4 关闭swap 5 根据规划设置主机名 6 在master添加hosts 7 将桥接的IPv4流量传递到iptables的链 8 时间同步 二 部署et
  • wireshark工具使用心得

    抓http包 但是protocal全部为tcp 并且Info也没有解析为http 打开 Edit Preferences 选择Protocals 选择http 在 tcp ports 中加入http端口 抓包数据不完整 清除浏览器缓存 再抓
  • 判断机器IP是公网ip还是内网ip

    首先是恭喜开通blog 对于ip是否是公网ip 网上已经有很多文章进行了描述 但我每次都记不太住 总要查找一下才又清楚 因此决定在这里记录下来 方便以后查询 ip地址分为五类 E类为保留为今后使用 D类为组播地址 用于主机网络地址的就是A类
  • windows套接字I/0模型-IOCP完成端口模型

    在 Windows 网络编程中 IOCP Input Output Completion Port 是一种高性能的 I O 模型 可以使应用程序能够处理大量并发 I O 操作 IOCP 模型主要通过事件通知和回调函数来处理异步 I O 操作
  • 最长01交替子串(浪潮笔试题)

    题意 给一个只有0和1的字符串 允许反转一个连续区间 即0变成1 1变成0 求最长的01交替串多长 允许不连续 我最先想到的是动态规划解法 状态设计方面 首先一个串的状态会有以0结尾和以1结尾两种 然后题目中说允许反转一个连续区间 那么根据
  • 【JavaEE】_JavaScript(WebAPI)

    目录 1 DOM 1 1 DOM基本概念 1 2 DOM树 2 选中页面元素 2 1 querySelector 2 2 querySelectorAll 3 事件 3 1 基本概念 3 2 事件的三要素 3 3 示例 4 操作元素 4 1
  • vue3使用高德地图完成标注点聚合

  • Linux内核提权漏洞CVE-2023-32233复测及POC脚本

    近日 研究人员发现了Linux内核的NetFilter框架中的新漏洞 CVE 2023 32233 该漏洞可被本地用户用于将权限提升为root 并完全控制系统 问题的根源在于tfilter nf tables是如何处理批处理请求的 经过身份
  • C++引用(&)解析:引用的作用,什么时候使用引用,引用与指针的不同

    引用是什么 什么时候使用引用 做函数的参数 做函数的返回值 引用与指针的不同 引用是什么 引用是变量的别名 理论上不开辟新的空间 符号 是类型标识符的一部分 被引用的数据类型 变量名称 如下图中 变量a 与变量ra 指向同一块内存空间 由此
  • 使用python的tkinter模块制作一个计算器

    使用tkinter模块制作的一个简单的计算器 由于刚学这个模块 所以做的不是很好 截图 点击计算后算式区的值会改成结果 可自行在数字触发的函数中添加数字输入就进行计算回显的功能 代码如下 import tkinter as tk impor
  • Python学习笔记(十):包、模块

    一 包 模块 Python中的包相当于文件夹 模块就是 py文件 不同包下有相同名称的模块时 为了区分 可在模块里加上 包名 模块名 路径 这个路径叫做命名空间 注 如果想让一个普通的文件夹变为包 则需要在这个文件夹内添加 init py文