Python模块和包

模块和包

为什么要有模块和包

在Python中,模块(Module)和包(Package)是组织和管理代码的重要工具,有助于将代码划分为可维护和重用的单元

模块(Module)

  1. 概念:模块是一个包含Python代码的文件(通常以 .py 扩展名结尾)。一个模块可以包含变量、函数、类等,它提供了一种将相关功能组织在一起的方式。

  2. 命名空间:模块本身具有自己的全局命名空间,不同模块命名空间彼此隔离,通过模块可以避免命名冲突,使得相同名称的函数或变量在不同的模块中不会相互影响。

  3. 模块的属性: 模块还包括一些特殊的属性,如 __name__,它指示模块的名称。__doc__ 属性: __doc__是一个用于存储模块文档字符串的特殊属性。文档字符串是对模块内容的描述,可以通过 help() 函数查看。

    # mymodule.py
    # 当模块被直接运行时,__name__ 的值为 "__main__",用于判断是否是主模块。
    if __name__ == "__main__":print("This module is being run directly.")
    else:print("This module is being imported.")
    # mymodule.py"""This is the module docstring."""module_variable = "I am a module variable"def module_function():"""This is the function docstring."""print("I am a module function")
    # main.pyimport mymoduleprint(mymodule.__doc__)  # 输出: This is the module docstring.
    print(mymodule.module_function.__doc__)  # 输出: This is the function docstring.
    
  4. 模块的使用

    #  fibo.py 
    # Fibonacci numbers moduledef fib(n):    # write Fibonacci series up to na, b = 0, 1while a < n:print(a, end=' ')a, b = b, a+bprint()def fib2(n):   # return Fibonacci series up to nresult = []a, b = 0, 1while a < n:result.append(a)a, b = b, a+breturn result
    
    • 导入模块

      import fibo # 直接导入
      from fibo import fib, fib2 # 可以将来自某个模块的名称直接导入到导入方模块的命名空间
      from fibo import * # 可以导入模块内定义的所有名称
      import fibo as fib # 模块名后使用 as 时,直接把 as 后的名称与导入模块绑定
      from fibo import fib as fibonacci  # 将模块中的属性与as后名称绑定
      
    • 以脚本方式执行模块

      python fibo.py <arguments>
      

      这个操作需要将以下代码加到模块底:

      if __name__ == "__main__":import sysfib(int(sys.argv[1]))
      
  5. 模块搜索路径

    • 内置模块: Python解释器会首先搜索内置模块,这些模块包含了一些核心的Python库和功能。

    • sys.path: Python解释器会查找 sys.path 变量,该变量是一个包含目录和.zip文件的列表。sys.path 的默认值包括以下几个部分:

        包含脚本的目录(当前工作目录)PYTHONPATH 环境变量中列出的目录标准库的安装目录内置模块的安装目录用户自定义目录
      
  6. “已编译的” Python 文件
    在Python中,已编译的文件通常指的是以 .pyc 扩展名结尾的文件。这些文件包含了原始的Python源代码的字节码形式,经过编译和优化以供Python解释器更高效地执行。生成和更新: 当你第一次导入一个模块时,解释器会检查是否存在对应的 .pyc 文件。如果存在,它会比较源代码和已编译的字节码文件的时间戳。如果源代码没有变化,而且 .pyc 文件仍然有效,解释器会直接加载已编译的字节码,而不重新生成。如果源代码发生变化或者没有 .pyc 文件,解释器会重新生成并更新 .pyc 文件。

包(Package)

  1. 概念: 包是一个包含模块和子包的目录,它允许你组织和管理大型项目中的模块。包是一个包含特殊文件 __init__.py 的目录。

  2. 创建包:为了将一个目录变成一个包,只需在该目录中创建一个 __init__.py 文件,它可以是空文件,也可以包含初始化包的代码。

    mypackage/
    ├── __init__.py
    ├── module1.py
    ├── module2.py
    └── submodule/├── __init__.py└── module3.py
    
  3. 导入包中的模块: 使用 import 关键字可以导入包中的模块。可以通过点运算符(.)访问子模块。

    import mypackage.module1
    mypackage.module1.some_function()# 或者使用 as 给模块取别名
    import mypackage.module1 as mod1
    mod1.some_function()
  4. __init__.py的作用: __init__.py 文件是包的初始化文件,它可以包含一些包级别的代码,也可以为空。当导入一个包时,__init__.py 会首先被执行。

    • 包标识:将包目录标识为一个Python包
    • 包初始化: __init__.py 文件在导入包时会被执行。这意味着你可以在 __init__.py 中执行一些初始化工作,例如设置包级别的变量、引入包内部的模块等。
# __init__.pypackage_variable = "I am a package variable" #设置包级别的变量
print("Initializing mypackage") # 执行初始化代码
__version__ = '1.0.0' # 表示版本号
__all__ = ['module1', 'module2'] # 在import *时只会导入这两个模块
  1. 相对导入: 相对导入允许在包内部的模块之间使用相对路径进行导入。

    # 例如,在 submodule/module3.py 中可以这样导入 module1
    from ..module1 import some_function
    

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

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

相关文章

Notes用户还可自助改密码

大家好&#xff0c;才是真的好。 很多时候企业对员工的安全使用进行了硬性规定&#xff0c;例如严格的就是&#xff0c;每三个月或六个月要至少更改一次密码。 在Domino 8.5以后&#xff0c;功能上多了一个新特性&#xff0c;叫ID保险库&#xff0c;其实就是把用户的id标识符…

day40 整数拆分 不同的二叉搜索树

题目1&#xff1a;343 整数拆分 题目链接&#xff1a;343 整数拆分 题意 将正整数n拆成k个正整数的和&#xff08;k>2&#xff09;使整数的乘积最大化 尽量拆成若干个数值近似相等的数&#xff0c;这使用的是数学里面的思想&#xff1a;ab<(a^2b^2)/2 (当且仅当ab时&…

开源的java 代码分析库介绍

本文将为您详细讲解开源的 Java 代码分析库&#xff0c;以及如何安装这些库、它们的特性、区别和应用场景。Java 社区提供了多种代码分析工具&#xff0c;这些工具可以帮助您在 Java 应用程序中进行代码质量评估、性能分析、安全检查等功能。 1. CheckStyle 安装 - 通过…

tsv文件在大数据技术栈里的应用场景

是的&#xff0c;\t 是指制表符&#xff08;tab&#xff09;&#xff0c;它通常用作字段分隔符在 TSV&#xff08;Tab-Separated Values&#xff09;格式的文件中。TSV是一种简单的文本格式&#xff0c;它使用制表符来分隔每一列中的值&#xff0c;而每一行则代表一个数据记录。…

http升级https需要做什么

背景&#xff1a;随着现代网络时代的高速发展&#xff0c;网络安全方面的日益更新&#xff0c;实现网站https协议的数量也在不断增多&#xff0c;完善安全方面的因素也在逐步增加。 下面从最基础的网站http协议全面升级为https协议的流程做出说明。 目录 首先带大家一起先了解…

Unity类银河恶魔城学习记录9-1 9-2 P89,90 Character stats - Stat script源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Stat.cs using System.Collections; using System.Collections.Generic; us…

javascript:void(0);用法及常见问题解析

javascript:void(0);用法及常见问题解析 1. 简介 javascript:void(0); 是一种 JavaScript 代码,常用于以下几种情况: 创建一个空链接,点击后不会发生任何跳转或动作。 在需要返回值的地方,返回 undefined 值。 避免意外的副作用,例如在箭头函数中,如果函数体不使用括号…

【C++】---string的OJ题

【C】---string的OJ题 1.字符串转整形数字&#xff08;重要&#xff09;&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;思路展示&#xff08;3&#xff09;代码实现 2.字符串相加&#xff08;重要&#xff09;&#xff08;1&#xff09;题目描述&#xff08;2&am…

cJSON C语言库解析和生成JSON数据

文章目录 概述常用的API函数介绍范例代码应用拓展总结概述 cJSON是一个轻量级的C语言库,用于解析和生成JSON数据。它提供了简洁而高效的API,使得在C语言中处理JSON数据变得简单和方便。 以下是一些cJSON库的主要特点和用法: 解析JSON数据:使用cJSON_Parse函数可以将JSON…

迁移学习 修改预训练参数的网络模型

在迁移学习中&#xff0c;要使用预训练权重。在训练好的网络权重中&#xff0c;使用的是1000类的分类任务。而我们自己的分类任务中没有1000类&#xff0c;需要修改网络。如果将MobileNetV2(num_classes5)&#xff0c;我们的网络在最后输出是5类&#xff0c;与1训练好的1000类不…

如何保护企业云上安全

近日&#xff0c;CrowdStrike发布了《2024年全球威胁报告》&#xff0c;揭示了网络攻击的最新趋势。报告指出&#xff0c;网络攻击生态系统仍在持续增长&#xff0c;CrowdStrike在2023年观察到了34个新的威胁参与者。同时&#xff0c;攻击者正越来越多地瞄准云环境&#xff0c;…

Docker Desktop将镜像存储位置从C盘迁移到其它盘

一、简述 Docker Desktop默认安装在C盘,默认镜像存储位置在 C:\用户\Administrator\AppData\Local\Docker\wsl Docker Desktop 通过WSL2启动,会自动创建2个子系统,分别对应2个 vhdx 硬盘映像文件。 可以命令行执行wsl --list -v 看到 二、迁移步骤 1、在Docker Desktop…

css之常用样式

展示样式一&#xff1a; <div class"showListBox"><div class"List" v-for"(i,index) in sealList" :key"index"> <div class"ListItemCon"><div class"ListItem-titleBox"><img src…

阿里云ACK的应用服务如何暴露公网并挂载域名

背景介绍 针对部署到阿里云ACK集群的应用服务&#xff0c;实际业务场景可能需要我们暴露其中的服务到公网并要求通过域名访问改服务&#xff0c;那具体在阿里云平台上如何实现呢 配置步骤 新建ack集群是后续工作的第一前提由于篇幅有限就不在本文赘述&#xff0c;如下是基本…

Conmi遇到的坑——禅道的PCDN

好家伙&#xff0c;悄悄在后台吃了七十多G流量&#xff0c;我把你当兄弟宣传&#xff0c;你把我当PCDN吸。 还纳闷今天创建个VUE项目怎么提示D盘没空间&#xff0c;明明留了几十G&#xff0c;好家伙&#xff0c;一下子全吸干了。 删了两个&#xff0c;还有一个

6N137SDM光电耦合器中文资料规格书PDF数据手册引脚图图片价格参数芯片概述

产品概述&#xff1a; 6N137M、HCPL2601M、HCPL2611M 单沟道和 HCPL2630M、HCPL2631M 双沟道包含一个 850 nm AlGaAS LED&#xff0c;与带有可调谐输出的极高速集成式光电探测器逻辑门级进行光耦合。此输出具有一个开路集电极&#xff0c;允许有线 OR 输出。耦合参数在 -40C 至…

QT----计算器

目录 1 搭建标准界面2、 逻辑编写2.1 初始化 1 搭建标准界面 按照下图搭设界面 修改样式让这计算器看起来更像一点&#xff0c;同时对按钮分组进行样式编辑&#xff0c;添加字符串name,为number&#xff0c;其他按键为other。之前的文章里出现过好几次不在赘述 修改最大的样式…

git init 执行后发生了什么?

首先在磁盘中创建一个新目录 Git&#xff0c;进入该目录后执行 git init 初始化。这个时候目录下会创建一个隐藏目录 ./git&#xff0c;这个./git 目录叫做 Git 版本库或者仓库 $ git init Initialized empty Git repository in D:/Git/.git/ 在讲解.git 目录内容前&#xff0…

【SpringBoot3】快速启动框架 快速入门 配置文件

文章目录 SpringBoot3介绍一、快速入门二、入门总结1. 为什么依赖不需要写版本&#xff1f;2. 启动器(Starter)是什么3. SpringBootApplication注解包括的效果&#xff1f; 三、SpringBoot3配置文件3.1 统一配置管理概述3.2 属性配置文件使用3.3 YAML配置文件使用3.4 批量配置文…

【Unity】读取Json的三种方法(JsonUtility,LitJson,Newtonsoft)

介绍 在Unity开发过程中&#xff0c;Json是比较常用的一种数据存储文本&#xff0c;尤其是在和第三方交互中&#xff0c;基本都是json格式。 先给出一个Json示例&#xff0c;我们来看看是如何解析的。 {"Player": [{"id": 1001,"name": "…