【Python 程序设计】包和数据人员入门【01/8】

这篇具有很好参考价值的文章主要介绍了【Python 程序设计】包和数据人员入门【01/8】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、说明

        一个坚实的Python项目的基础是掌握模块,包和导入。 以下文章是有关 Python 数据工程系列文章的一部分,旨在帮助数据工程师、数据科学家、数据分析师、机器学习工程师或其他刚接触 Python 的人掌握基础知识。
        迄今为止,本初学者指南包括:
第 1 部分:Python 包探讨了 Python 模块、Python 包的基础知识以及如何将模块导入您自己的项目。【Python 程序设计】包和数据人员入门【01/8】 
第 2 部分:介绍了依赖项管理和虚拟环境。【Python 程序设计】数据人员入门【02/8】
第 3 部分: 项目的最佳实践,涵盖了构建项目的 9 个最佳实践和示例。【Python程序设计】 项目的最佳实践【03/8】
第 4 部分: Dagster 管道,我们探讨了设置 Dagster 项目以及数据资产的关键概念。【Python程序设计】 从 Python 项目到 Dagster Pipelines【04/8】
第 5 部分:我们将介绍环境变量的重要性以及如何使用它们。【Python程序设计】Python 中的环境变量【05/8】
第 6 部分:类型提示,或类型提示如何减少错误。
第7 部分:模式,或学习设计模式,它们是软件设计中常见问题的可重用解决方案。【Python程序设计】 工厂模式【07/8】

 

        Dagster运行在Python上,大多数对Python有基本了解的数据工程师或开发人员都可以快速启动并运行简单的管道。但是一些不太熟悉Python的用户发现Python包有点令人头疼。

        因此,让我们谈谈什么是 Python 包以及如何使用它们。我们将介绍特定主题,这些主题将帮助你了解构建 Python 项目所涉及的内容,以及这如何转换为更复杂的生成,例如数据管道和业务流程协调程序。在后面的文章中,我们将看到这些概念如何应用于Dagster。

        如果您只使用过现有的代码库或 Jupyter 笔记本,那么从头开始打包代码可能会让人不知所措。什么是__init__.py文件,何时应使用它?什么是相对进口与绝对进口?让我们潜入! 

二、什么是 Python 包?

        我们将 Python 代码放入包中,因为它可以轻松地在 Python 社区中共享和重用代码。包只是文件和目录的集合,其中包括我们稍后将检查的代码、文档和其他必要文件。

        当我们想要重用复杂的代码时,我们使用 Python 包而不是脚本文件和 Jupyter 笔记本。使用脚本文件,代码可能会变得混乱且难以维护,而笔记本通常用于探索性工作,但不容易重用。

        您可以将 Python 包视为一个独立的“项目”。一个项目可以包含多个模块,每个模块都包含一组特定的相关函数和变量。因此,这使您可以更轻松地将所需“项目”中的工具嵌入到您自己的代码中。

2.1 从模块开始

        模块是 Python 包的构建块。模块是包含定义和语句的单个 Python 文件。它们提供了一种将代码结构化为逻辑单元并在多个项目中重用代码的方法。

        若要在代码中使用模块,请使用 import 语句。例如,如果您有一个名为 mymodule.py的模块,则可以通过以下 import 语句在代码中使用它的函数和变量:

import mymodule

        导入模块后,可以使用点 () 表示法访问其函数和变量。例如,如果 mymodule.py 文件有一个名为.greet的函数,则可以在代码中使用它,如下所示:

import mymodule
mymodule.greet("John")

        让我们创建自己的示例模块来说明这个概念。创建一个名为examplemodule.py的文件,并向其中添加以下代码:

def greet(name):
    print("Hello, " + name + "!")
def add(a, b):
    return a + b

        在这里,我们在文件中定义了两个函数greetadd。现在可以导入examplemodule.py这些函数并在代码的其他部分中使用。​​​​​​​

2.2 从模块到包

        随着代码的增长,在单个模块中管理和维护所有代码可能会变得困难。提供了一种将代码组织和拆分为多个模块的方法,同时仍保持所有内容井井有条且可访问。

        要创建包,只需创建一个目录并在其中放置一个或多个模块。该目录应包含一个名为 __init__.py的特殊文件,该文件告诉 Python 此目录是一个包,应按包处理。该文件可以留空,也可以包含导入包时将执行的代码。我们将在下面更详细地解释​​​​​​​__init__.py文件。

        让我们将上一节中的示例模块重构为包。创建一个名为examplepackage的目录并将文件​​​​​​​examplemodule.py移动到其中。然后,创建一个在examplepackage目录中调用的__init__.py文件。​​​​​​​​​​​​​​

您的文件结构现在应如下所示:

examplepackage/
    __init__.py
    examplemodule.py

        现在,您可以在代码中从文件中导入函数,如下所示:examplemodule.py

import examplepackage.examplemodule

examplepackage.examplemodule.greet("John")
examplepackage.examplemodule.add(1, 2)

        在此示例中,我们已将文件examplemodule.py重构为名为examplepackage 的包。文件examplemodule.py中的函数现在可以像以前一样导入并在代码中使用,但具有包提供的组织和模块化的额外好处。​​​​​​​​​​​​​​

2.3 什么是__init__.py?

        __init__.py是 Python 包中的一个特殊文件,用作包的入口点。它在导入包时执行,其代码可用于初始化包或设置任何必要的组件。该文件是可选的,但通常用于定义包的公共接口,使其他开发人员更容易理解和使用包。

        在以前版本的 Python 中,需要__init__.py将目录识别为包。但是,从 Python 3.3 开始,由于引入了 PEP 420,它是可选的,它允许在没有__init__.py文件的情况下定义包。

        下面是如何在包中使用的示例:__init__.py

# examplepackage/__init__.py

from .examplemodule import greet, add
__all__ = [
    'greet',
    'add',
]

        在此示例中,该文件从文件__init__.py导入 greetadd函数,并使它们成为包的公共接口的一部分。__all__该变量用于定义包的公共接口,并使其他开发人员更容易理解和使用examplemodule.py包。​​​​​​​​​​​​​​​​​​​​​

        通过此设置,您现在可以从 examplepackagegreet、​​​​​​​add函数导入,如下所示:

import examplepackage
examplepackage.greet("John")
examplepackage.add(1, 2)

三、你如何在 Python 中管理包?

        开发人员分发包的最常见方式是将它们上传到称为 Python 包索引 (PyPI) 的公共存储库。我们使用一个名为pip的系统,它代表“Pip安装包”。它是一个命令行工具,允许用户从 PyPI 和其他包索引安装和管理包。

        如果您使用 ,则已通过 Python 包索引 (PyPI) 下载并安装了包。pip install

        像 pip 这样的包管理系统可以轻松安装、更新和删除包,以及管理项目中的依赖项(其他包正常运行所需的包)。

四、pip如何工作?

  pip install是我们用来从名为 PyPI 的库甚至您自己的计算机下载和安装不同包的命令。当您运行此命令时,它将检查该软件包在 PyPI 上是否可用,如果是,它将下载并将其安装在您的计算机上。此外,它将检查 - 如果需要,安装- 包元数据中列出的所有依赖项。最后,pip 将跟踪您安装的所有软件包,以帮助您以后升级或卸载它们。

        默认情况下, pip install会安装最新版本的软件包,但如果需要,可以选择使用pip install <PACKAGE>==<VERSION>pip install numpy==1.23.5 来安装特定版本,例如,可以使用 。如果你的代码出现问题并且需要使用特定版本的包,这会很有帮助。

        你有没有注意到,当你用来向你的Python代码添加一个功能时,你用来安装它的名称与你导入它时使用的名称不同?发生这种情况是因为有两种类型的名称:pip install

  • 分发名称,这是用于安装 Pack 的名称pip install
  • 名称,这是在代码中导入包时使用的名称。

        发行版名称是唯一的,并且通过 PyPI(从中获取包的库)保证与其他包名称不同。另一方面,包名称由创建包的人选择,因此它可能不是唯一的。

        这就是为什么您可以使用 pip install安装名为“dagster-dbt”的包,但使用名称“dagster_dbt”将其导入代码中。这也是为什么你可以使用 pip install来安装一个名为“scikit-learn”的包,但使用名称“sklearn”将其导入到你的代码中。

五、什么是相对进口与绝对进口?

        编写包时,有时我们可能希望从同一包中的另一个模块导入代码。我们需要在 Python 中导入模块或包的两种不同方式之间进行选择,相对导入绝对导入。

        相对导入由显式或隐式导入组成,但您实际上只需要了解显式相对导入,因为 Python 3 不支持隐式相对导入。

        相对导入使用前导点。单个前导点表示相对导入,从当前包开始。两个或多个前导点表示对当前包的父级的相对导入,第一个点之后每个点一个级别。例如,给定以下包布局:

package/
    __init__.py
    subpackage1/
        __init__.py
        moduleX.py
        moduleY.py
    subpackage2/
        __init__.py
        moduleZ.py
    moduleA.py

        对应的相对导入是指:在 subpackage1/moduleX.py 或 subpackage1/__init__.py 中,以下是有效的相对导入:

from .moduleY import spam
from .moduleY import spam as ham
from . import moduleY
from ..subpackage1 import moduleY
from ..subpackage2.moduleZ import eggs
from ..moduleA import foo

        相对导入允许您导入相对于当前模块的模块。它们使用关键字“from”,后跟当前包的名称以及要导入的模块或包的名称。例如,如果有一个以两个模块命名的包,并且 可以使用相对导入将代码从 pymodule1.py导入module2.py ,如下所示:

# examplepackage/module2.py

from .module1 import greeting
def greet(name):
    print(greeting + " " + name)

        在这里,from .module1 import greeting相对导入用于将​​​​​​​greeting变量从​​​​​​​module1.py文件导入到​​​​​​​module2.py文件中。​​​​​​​.module1前面指示导入应相对于当前模块。

        绝对导入允许您使用模块的全名导入模块,而不管它们相对于当前模块的位置如何。它们使用要导入的模块或包的完整路径。例如,您可以使用绝对导入将greeting变量从module1.py文件转移到module2.py文件中,如下所示:

# examplepackage/module2.py

from examplepackage.module1 import greeting
def greet(name):
    print(greeting + " " + name)

        在这里,from examplepackage.module1 import greeting绝对导入用于将greeting变量从module1.py文件导入到module2.py文件中。模块的全名 examplepackage.module1用于指定模块的位置。​​​​​​​​​​​​​​​​​​​​​

        在 Python 3 中,相对导入必须是显式的,绝对导入是默认行为。文章来源地址https://www.toymoban.com/news/detail-700489.html

到了这里,关于【Python 程序设计】包和数据人员入门【01/8】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python 程序设计入门(023)—— Python 的自定义函数

    在 Python 中,函数的应用非常广泛。比如:input()、print()、str()、range()、len() 等,这些称为 Python 的内置函数,可以直接使用。Python 支持自定义函数,即将一段有规律的、可重复使用的代码定义为函数,达到一次编写,多次使用的目的。 自定义函数使用 def 实现,语法格

    2024年02月12日
    浏览(30)
  • 案例228:基于微信小程序的走失人员的报备平台设计

    文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序运行软件:微信开发者 目录 目录 前言 系统展示 管理员后台功能实现 家属管理 志愿者管理 公安部门管理

    2024年02月21日
    浏览(31)
  • Python 程序设计入门(018)—— format() 函数的用法详解

    format() 函数可以对数据进行格式化处理,将值转换为由 format_spec 控制的【格式化】表示形式。format() 函数的语法格式如下: 说明: (1)value:要转换的数据。 (2)format_spec:格式化解释,取决于值参数的类型; (3)默认情况下,format_spec 是一个空字符串,通常与调用 st

    2024年02月03日
    浏览(27)
  • 基于Java+Vue+uniapp微信小程序走失人员报备平台设计和实现

    博主介绍 : ✌ 全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到哟 2022-2024年

    2024年02月04日
    浏览(39)
  • Python 程序设计入门(008)—— 列表的操作(3):列表推导式

    使用列表推导式可以快速生成一个列表。或者根据某个列表生成满足指定需求的列表。列表推导式包含在方括号内,它由一个表达式、一个或多个 for 循环和一个用于过滤生成的列表的可选条件组成。 列表推导式的语法格式如下: 说明: (1)Expressinon:表达式,用于计算列

    2024年02月14日
    浏览(36)
  • Python 程序设计入门(025)—— 使用 os 模块操作文件与目录

    Python 内置了 os 模块及其子模块 os.path,用于对目录或文件进行操作。在使用 os 模块及其子模块 os.path 模块时,需要使用 import 导入该模块,才能使用它们提供的函数或方法。 1、os 模块提供的操作目录的函数 os 模块提供的操作目录的函数如下表所示: 函数 说明 getcwd() 返回当

    2024年02月11日
    浏览(31)
  • Java程序设计入门教程--控制台输入数据

    控制台输入数据常用类 Scanner类        在 很多情况下,我们需要 Java 程序能够对我们指定的值进行计算,这样的话就需要我们的 Java 程序能够读取我们所输入的值。我们可以使用 Java 自带的 Scanner 类来从控制台获取 输入 。        Scanner 类在包 java.util 里。我们一般在程

    2024年02月07日
    浏览(32)
  • Python数据处理爬虫程序设计(人民网新闻)

    目录 目录… 错误!未定义书签。 正文 4 1绪论 4 2相关技术介绍 4 2.1网络爬虫技术 4 2.1.1网络爬虫技术概述 4 2.1.2python 的网络请求 4 2.1.3如何解决网页的反爬问题 5 3设计目的与要求 5 3.1 程序设计的目的与要求 5 4总体设计 5 4.1 程序目录结构设计 5 5详细设计 6 5.1分析目标网站

    2024年02月08日
    浏览(28)
  • 同济大学Python程序设计基础 实验九:数据可视化

    1.创建一个2行1列的绘图区并在第1行第1列绘制函数f(x)=x2 的曲线图(x的取值范围[-1,1]),在第2行第1列绘制函数f(x)=1/x的曲线图(x的取值范围[0,1]),效果如图2.9.1所示。 2.调用scatter函数绘制正弦函数的曲线,请在曲线中添加一个表示XY的轴线,并在X轴方向输出刻度标记文本,

    2024年02月16日
    浏览(29)
  • C++ 程序设计入门

    ✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 程序是算法与数据结构的载体,是计算机用以

    2024年02月11日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包