杰瑞科技汇

Python for-in循环最后如何处理?

_ 是一个“临时”或“忽略”的变量名

for _ in ... 结构中,_ 本身并不是 Python 的关键字,而是一个合法的变量名,在 Python 社区中,它有一个非常普遍的约定俗成的用法:

Python for-in循环最后如何处理?-图1
(图片来源网络,侵删)

_ 被用作一个“临时变量”或“哑元变量”(Dummy Variable),用来表示你将要迭代的某个值,但你并不打算在循环体内部使用这个值。

它的意思是:“我知道这里会有一个值,但我现在不需要它,所以我就用一个 _ 来占个位符。”


为什么使用 for _ in ...

主要有以下几个原因:

当你只关心循环次数,不关心循环的值

这是最常见的用法,当你只想让某段代码执行固定的次数,而不需要用到循环变量时,for _ in range(...) 就非常方便。

Python for-in循环最后如何处理?-图2
(图片来源网络,侵删)

对比一下:

不推荐的做法 (用一个有意义的变量名,但实际不使用):

# 我们只想打印5次 "Hello World"
for i in range(5):  # i 是一个有意义的变量名,暗示它是索引
    print("Hello World")
# 这会让阅读代码的人困惑:为什么定义了 i 却不用?是不是忘了用?

推荐的做法 (使用 _):

# 我们只想打印5次 "Hello World"
for _ in range(5):  # _ 清晰地表明:我们只关心循环执行了5次,不关心每次的值
    print("Hello World")

代码意图非常清晰,避免了混淆。

Python for-in循环最后如何处理?-图3
(图片来源网络,侵删)

当你忽略从可迭代对象中解包的某个值

当你从一个元组、列表等可迭代对象中解包多个值,但只想使用其中一部分时,_ 是一个绝佳的占位符。

例子: 假设你有一个函数返回一个元组 (x, y, z),但你只需要 xz

data = (10, 20, 30) # x=10, y=20, z=30
# 不推荐的做法
x = data[0]
z = data[2]
# 这样写很啰嗦,而且如果元组结构变化,容易出错
# 推荐的做法 (使用 _)
x, _, z = data
print(f"x 的值是: {x}")  # 输出: x 的值是: 10
print(f"z 的值是: {z}")  # 输出: z 的值是: 30
# print(_) # 如果你尝试打印,它会显示 20,表明它确实被赋值了

这里的 _ 就像一个“黑洞”,吞噬了你不需要的那个值 20

代码更简洁、意图更明确

使用 _ 可以让其他开发者一眼看出你的代码意图:“我在这里迭代,但我只关心迭代这个行为本身,不关心迭代的具体内容”。


for _ in ... 的具体例子

例子 1:for _ in range(n)

这是最经典的用法,用于固定次数的循环。

# 计算 1 到 100 的累加和,但我们不需要用到具体的数字
total = 0
for _ in range(100):
    total += 1 # 这里我们只是单纯地累加,每次加1
print(f"循环了 {total} 次") # 输出: 循环了 100 次

例子 2:for _ in <可迭代对象>

当你遍历一个列表,但只关心列表的长度时。

my_list = ['apple', 'banana', 'cherry', 'date']
# 我们只想处理列表中的前3个元素,不关心具体是哪个元素
for _ in my_list[:3]:
    print("处理了一个水果...")
# 输出:
# 处理了一个水果...
# 处理了一个水果...
# 处理了一个水果...

例子 3:在多变量解包中忽略值

这在处理函数返回值或数据库查询结果时非常有用。

def get_user_info():
    """模拟从数据库获取用户信息,返回 (id, username, email, registration_date)"""
    return (101, "john_doe", "john@example.com", "2025-01-15")
# 我们只需要用户ID和用户名
user_id, username, _, _ = get_user_info()
print(f"用户ID: {user_id}, 用户名: {username}")
# 输出: 用户ID: 101, 用户名: john_doe

_ 的其他常见用法(进阶)

_ 这个约定在 Python 中不止用在 for 循环里:

  1. 在交互式解释器中_ 代表上一个表达式的结果。

    >>> 2 + 2
    4
    >>> _
    4
    >>> print(_)
    4
  2. 作为函数参数的“国际化”占位符:在 gettext 模块中,用于标记需要被翻译的字符串,但不提取原始字符串。

    from gettext import gettext as _
    # ... 国际化设置 ...
    print(_("Welcome to my application!"))
    # 这里的 `_` 是一个函数调用,不是我们讨论的变量名。
    # 但为了不混淆,通常会给 gettext 函数起个别名,`_t`。
  3. 作为临时变量名:在单次代码块中,如果你需要一个临时变量但不想费心取名,也可以用 _,但这在 for 循环中更为常见和标准。


语法 含义 何时使用
for item in my_list: 遍历 my_list,并将每个元素赋值给变量 item,并在循环体内使用它。 当你需要处理可迭代对象中的每一个具体元素时。
for _ in my_list: 遍历 my_list,但忽略每个元素的值,你只关心循环被执行了多少次。 当你只关心循环的次数,或者迭代行为本身,而不关心元素内容时。

for _ in ... 的最后,紧跟的是一个可迭代对象(如 range(10)[1, 2, 3]"hello" 等)。_ 只是一个约定俗成的、用于“忽略”值的占位符变量名,掌握它能让你的 Python 代码更加地道和易于理解。

分享:
扫描分享到社交APP
上一篇
下一篇