理解 Python 的下划线 (_):综合指南

2023-10-18

Python 作为一种灵活且直观的语言,引入了许多可以简化编码的结构。下划线就是这样的一种结构( _ ),一个具有多种用途的特殊字符,范围从变量命名到解释器目的等等。对于新手程序员来说,下划线可能会让人感到困惑,但理解它们的用途可以显着提高你的 Python 编程能力。本文深入探讨了 Python 下划线,揭开了它们的不同用法和意义的神秘面纱。

单下划线

  1. 作为一次性变量
  2. 在Python中,我们经常遇到这样的情况:我们需要迭代一个范围或任何可迭代对象,但我们不打算在循环内使用变量。在这种情况下,单个下划线被用作'丢弃'变量,表明循环变量被有意忽略。

    1
    2
    for _ in range(5):
        print(“你好,Python!”)

  3. 名字之后
  4. 在 Python 中,名称后面的单个下划线用作命名约定,以指示名称供内部使用。它表明变量、方法或属性仅供类、模块或函数内部使用,并且不是 API 的一部分。

    1
    2
    3
    4
    class MyClass:
        def __init__(self):
            self.公共变量 = “我公开了!”
            self._内部变量 = “我是内在的!”

    尽管 Python 不强制执行这些名称的隐私,但下划线向程序员强烈暗示它是供内部使用的。

双下划线 (Dunder)

  1. 名字之前
  2. 当您看到带有双下划线前缀的名称时( __ ),这是 Python 的名称重整方式。这主要是为了避免与子类中的名称发生命名冲突。 Python 自动在名称前加上类名前缀。

    1
    2
    3
    class MyClass:
        def __init__(self):
            self.__private_var = “我很私密!”

    Here, `__private_var`会被毁坏到`_MyClass__private_var`,从而避免任何潜在的命名冲突。

  3. 围绕一个名字(魔术方法)
  4. 名称前后的双下划线具有特殊含义。这些都与 Python 的魔法方法有关。这些是您可以定义添加的特殊方法“magic”到您的类,例如重载运算符或实现协议方法。魔术方法是 Python 面向对象特性的重要组成部分。

    1
    2
    3
    4
    5
    6
    class 魔法班:
        def __init__(self, num):
            self.num = num
     
        def __str__(self):
            return f“一个带有编号 {self.num} 的 MagicClass 实例”

    在上面的代码中,`__str__`是一个神奇的方法,它定义了如何将类转换为字符串。

解释器中的单下划线

在Python解释器中,单个下划线还有另一个有趣的用法。它用于保存最后执行的表达式的结果。

1
2
3
4
>>> 5 + 5
10
>>> _
10

The _ 给出最后执行的语句的结果,即本例中的 10。

数字文字中的双下划线

Python(从版本 3.6 开始)还允许在数字文本中使用下划线。这纯粹是为了增强人类的可读性。例如,您可以将一百万写为1_000_000,Python 会将其解释为1000000.

1
2
3
>>> num = 1_000_000
>>> num
1000000

数字文字中的下划线不会影响值;这只是一个可读性功能。

结论

Python 中的下划线绝非无足轻重的细节。它们有明确的用途,具体取决于它们的位置和数量。了解下划线的用法不仅可以帮助您的代码更简洁、更惯用,还可以引导您充分利用 Python 的潜力。快乐Python!

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

理解 Python 的下划线 (_):综合指南 的相关文章

  • 如何避免使用全局变量?

    我使用全局变量 但我读到它们不是一个好的实践或Pythonic 我经常使用的函数会给出许多是 否变量 我需要在主函数中使用这些变量 例如 在不使用全局变量的情况下 如何编写以下代码 def secondary function global
  • from __future__ importabsolute_import 实际上做了什么?

    I have answered https stackoverflow com a 22679558 2588818一个关于Python中绝对导入的问题 我认为我通过阅读理解了这个问题Python 2 5 变更日志 https docs p
  • 在Python中解析空选项

    我有一个应用程序 允许您将事件数据发送到自定义脚本 您只需布置命令行参数并指定什么事件数据与什么参数相匹配 问题是这里没有真正的灵活性 您制定的每个选项都将被使用 但并非每个选项都必须有数据 因此 当应用程序构建要发送到脚本的字符串时 某些
  • 在 Windows 上使用 Python 打开设备句柄

    我正在尝试使用 Giveio sys 驱动程序 该驱动程序需要先打开一个 文件 然后才能访问受保护的内存 我正在查看 WinAVR AVRdude 中的 C 示例 它使用以下语法 define DRIVERNAME giveio HANDL
  • 不要在异常堆栈中显示 Python raise-line

    当我在 Python 库中引发自己的异常时 异常堆栈将引发行本身显示为堆栈的最后一项 这显然不是一个错误 在概念上是正确的 但是当您在外部使用代码 例如作为模块 时 它会将重点放在对调试无用的东西上 有没有办法避免这种情况并强制 Pytho
  • PyKCS11 不可哈希列表

    我的 python 脚本旨在获取特定 so 库中插槽 令牌的详细信息 输出如下所示 Library manufacturerID Safenet Inc Available Slots 4 Slot no 0 slotDescription
  • 使用 boto 和 python 从带有参数的布局创建 mTurk HIT

    我正在尝试利用 boto 在 Mechanical Turk 中生成 HIT 目标是使用我的 mTurk 帐户上已生成的通用布局 并向其传递图像 URL 以迭代创建 HIT 问题是 即使正确命名参数 如果图像 url boto 也不成功 我
  • Python lmfit:拟合 2D 模型

    我正在尝试将二维高斯拟合到一些灰度图像数据 该数据由一个二维数组给出 lmfit 库实现了一个易于使用的模型类 它应该能够做到这一点 不幸的是文档 http lmfit github io lmfit py model html http
  • 使用底图和Python在地图中绘制海洋

    我正在绘制此处提供的 netCDF 文件 https goo gl QyUI4J https goo gl QyUI4J Using the code below the map looks like this 然而 我希望海洋是白色的 更
  • 在用户提交的正则表达式中查找捕获组

    我有一个 python 应用程序 需要处理用户提交的正则表达式 出于性能考虑 我想禁止捕获组和反向引用 我的想法是使用另一个正则表达式来验证用户提交的正则表达式不包含任何命名或未命名的组捕获 如下所示 def validate user r
  • OpenCV 在使用 anaconda 的 Linux 上无法与 python 正常工作。收到 cv2.imshow() 未实现的错误

    这就是我得到的确切错误 我的操作系统是 Ubuntu 16 10 OpenCV 错误 未指定错误 该功能未实现 使用 Windows GTK 2 x 或 Carbon 支持重新构建库 如果您使用的是 Ubuntu 或 Debian 请安装
  • 没有名为 objc 的模块

    我正在尝试将 cocoa python 与 Xcode 一起使用 但它总是会出现错误 Traceback most recent call last File main py line 10 in
  • 在 Django 1.9 中使用信号

    在 Django 1 8 中 我能够使用信号执行以下操作 一切顺利 init py from signals import 信号 py receiver pre save sender Comment def process hashtag
  • 有没有办法在Python中调用子类定义的方法?

    The init 方法定义了创建类的实例时要执行的操作 创建子类时我可以做类似的事情吗 假设我有抽象类Entity class Entity def onsubclasscreation cls for var in cls annotat
  • 传递宏作为参数 jinja dbt

    Today date milliseconds 是我在项目中的宏 如何将此宏重定向为参数 以便默认情况下我可以在 yml 中编写另一个宏 test valid date model column name exclude condition
  • 嵌套 for 循环以列出具有不同“if”条件的理解

    我正在尝试将此嵌套循环转换为列表理解 但我不确定是否可能 因为 tmp 列表中的项目可能有不同的值 这是最好的方法吗 谢谢 final for a in range 13 1 for b in range 0 4 for c in rang
  • launchd执行python脚本,但导入失败

    我使用 appscript 编写了一个 python 脚本来跟踪我当前活动的窗口 我通过 launchd 运行它 但是当我这样做时 它无法导入 appscript 我已经在 launchd 的 plist 中设置了 PYTHONPATH 但
  • 保存 Jupyter Notebook,并显示 Plotly Express 小部件

    我有一个 Jupyter 笔记本 python 我使用plotlyexpress 在笔记本中绘图以进行分析 我想与非编码人员共享此笔记本 并让交互式视觉效果仍然可用 但它似乎不起作用 我尝试以下此处提出的建议 https community
  • jupyter run magic 将参数传递给笔记本

    当您在第一个 jupyter 笔记本 first ipynb 中时 您可以执行第二个 但如何传递参数呢 假设第二个有以下内容 xx 10 您可以从第一个调用第二个 如下所示 run second ipynb xx will print 10
  • Python list.extend() 是保序的吗?

    我想知道扩展函数是否保留两个列表中的顺序 gt gt list 1 2 3 gt gt list extend 4 5 gt gt list 1 2 3 4 5 扩展总是这样工作吗 Yes list extend just extends给

随机推荐

  • 如何在 Ubuntu 20.04 上安装和使用 FFmpeg

    FFmpeg 是一个用于处理多媒体文件的免费开源工具集合 它包含一组共享的音频和视频库 例如libavcodec libavformat和libavutil 使用 FFmpeg 您可以在各种视频和音频格式之间进行转换 设置采样率 捕获流音频
  • Linux 睡眠命令(暂停 Bash 脚本)

    sleep是一个命令行实用程序 允许您将调用进程挂起指定的时间 换句话说 sleep命令将下一个命令的执行暂停给定的秒数 The sleep该命令在 bash shell 脚本中使用时非常有用 例如 在重试失败的操作或在循环内时 在本教程中
  • 如何在 Ubuntu 18.04 上安装 CouchDB

    CouchDB 是由 Apache 软件基金会维护的免费开源容错 NoSQL 数据库 CouchDB 服务器将其数据存储在命名数据库中 其中包含以下文档JSON结构 每个文档由许多字段和附件组成 字段可以包括文本 数字 列表 布尔值等 它包
  • 如何在 Debian 10 上安装 Xrdp 服务器(远程桌面)

    Xrdp 是 Microsoft 远程桌面协议 RDP 的开源实现 允许您以图形方式控制远程系统 使用 RDP 您可以登录到远程计算机并创建真实的桌面会话 就像登录到本地计算机一样 本教程介绍如何在 Debian 10 Linux 上安装和
  • 如何使用SFTP命令传输文件

    SFTP SSH 文件传输协议 是一种安全文件协议 用于通过加密的 SSH 传输访问 管理和传输文件 与传统的相比FTPSFTP 提供 FTP 的所有功能 但更安全且更易于配置 Unlike SCPSFTP 仅支持文件传输 但允许您对远程文
  • 15+ yum update 命令示例

    Yum 是 Red Hat CentOS 和其他操作系统上使用的包管理器Linux 发行版使用 RPM 包管理器 Yum 用于安装 更新 删除或以其他方式操作这些 Linux 系统上安装的软件包 在本教程中 我们将介绍 yum update
  • Seaborn barplot 教程(以条形图可视化您的数据)

    数据可视化已成为与分析数据进行交流的重要阶段 通过数据可视化 数据科学家和业务分析师可以轻松地从大量数据中提取见解 Seaborn 是一种 Python 中的统计图形绘图和可视化库 允许数据分析师和数据科学专业人员呈现可视化 在本文中 我们
  • 15 个 Linux 读取命令示例

    The readLinux 中的命令允许您从标准输入或文件中读取输入 它允许您接收数据并将其分配给变量 本教程将指导您完成不同的选项read命令 目录 hide 1 读取用户的输入 2 从文件中读取输入 3 指定分隔符
  • 创建和使用动态 Laravel 子域路由

    许多网站为用户的个人资料或页面提供了一个自定义子域 因此用户可以通过 http username website com 访问他的个人资料 这要好得多 在这篇文章中 我们将了解如何高效地进行动态 Laravel 子域路由 配置DNS 要做到
  • 使用 Pandas read_html 函数读取 HTML 表格

    您可以使用read html直接从网站抓取 HTML 表格并将其转换为数据框 它简化了从网页提取数据的过程 The read html函数接受一个包含 URL 或指向 HTML 文件的文件路径的字符串 提取该 HTML 页面中包含的所有表
  • Python SQLite3教程(数据库编程)

    在本教程中 我们将使用 Python 以编程方式使用 SQLite3 数据库 一般来说 SQLite 是一种无服务器数据库 您可以在包括 Python 在内的几乎所有编程语言中使用它 无服务器意味着无需安装单独的服务器即可使用 SQLite
  • Linux iptables 防火墙简化示例

    在上一篇文章中 我们讨论了如何使用强化最佳实践保护 Linux 服务器 有人问我防火墙部分 里面简单介绍了iptables防火墙 今天我们就来详细讨论一下Linux iptables 防火墙以及如何使用出色的防火墙来保护您的服务器流量 目录
  • Bash For 循环:Linux 中的迭代指南

    Bash 中的 for 循环是重要的控制结构 用于脚本编写重复任务 它们提供多次执行一系列命令 循环范围 变量 命令输出等的能力 这个综合教程将带您了解在 Bash 中使用 for 循环的各种方法 从基本语法到更高级的主题 例如嵌套循环和动
  • 使用 Pandas read_parquet 读取 Parquet 文件

    The read parquet函数于Pandas允许您将 Parquet 文件读入数据框 它提供了从本地文件路径或 URL 读取 Parquet 文件的功能 它的多功能性还不止于此 该函数提供了几个额外的选项来加载和处理文件中的数据 目录
  • Shell 脚本编写第 4 部分 – 输入、输出和重定向

    在上一篇文章中 我们讨论了参数和选项详细 今天 我们将讨论 shell 脚本中的一些基本内容 即输入 输出和重定向 您可以通过两种方式显示 shell 脚本的输出 在屏幕上显示输出 将输出发送到文件 目录 hide 1 标准文件描述符 2
  • 使用 to_excel 将 Python Pandas DataFrame 导出到 Excel

    The to excel功能允许您导出PandasDataFrame 到 Excel 文件 这对每个数据科学家都非常有益 本教程将让您全面了解如何to excel函数的工作原理 以及如何自定义其行为以满足您的需求 目录 hide 1 基本语
  • 使用 Python Pandas read_csv 读取 CSV

    在本教程中 我们将重点关注read csv函数 它允许我们读取 CSV 文件并将其转换为Pandas数据框 The read csvfunction 不仅仅是一个 CSV 文件加载工具 它配备了大量参数来处理 CSV 文件中可能出现的各种情
  • 如何在 MongoDB 中创建管理员用户

    在大规模的软件工程中 我们在每一步的实现中都会遇到问题 然而 最大的挑战仍然是找出问题的根本原因并解决它们 在本文中 我们将学习如何使用 MongoDB 实现用户身份验证 并在用户不再是组织的员工时删除 MongoDB 中的用户 Mongo
  • 测试主机标头注入漏洞

    在不断发展的 Web 安全领域 主机标头注入是可能困扰 Web 应用程序的漏洞之一 当 Web 应用程序或服务器未正确验证或限制传入 HTTP 请求中的主机标头时 就会出现此缺陷 从而使其遭受恶意利用 无论您是开发人员 安全专业人士还是好奇
  • 理解 Python 的下划线 (_):综合指南

    Python 作为一种灵活且直观的语言 引入了许多可以简化编码的结构 下划线就是这样的一种结构 一个具有多种用途的特殊字符 范围从变量命名到解释器目的等等 对于新手程序员来说 下划线可能会让人感到困惑 但理解它们的用途可以显着提高你的 Py