Python - 元组赋值中有“无关”符号吗?

54 投票
9 回答
25604 浏览
提问于 2025-04-15 22:12

给定一个字符串 "VAR=value",我想要在第一个 '=' 符号处分割它(只在第一个 '=' 符号处分割,后面的 可能还会有更多的 '=' 符号),像这样:

var, sep, value = "VAR=value".partition('=')

有没有办法不声明一个变量 'sep'?像这样(这个语法是我自己编的):

var, -, value = "VAR=value".partition('=')

为了完整起见,我的目标是 Python 2.6 版本

9 个回答

4

在这个编程语言里,没有什么官方的规定可以用来解决这个问题;你可以随便用一个临时变量。至于标准,我看到在Python和其他语言中,有时会用下划线。唯一的问题是,下划线在本地化时被用作gettext的别名。不过,如果你不做本地化,或者不使用全局绑定的话,下划线应该是没问题的。

16

快到了:

var, _, value = "VAR=value".partition('=')

_ 通常被认为是一个不关心的变量。

61

_ 确实是一个很常用的选择,代表“一个不重要的名字”——它是合法的名字,看起来也不显眼等等。不过,有时候这些特点反而会给你带来困扰。例如,GNU 的 gettext 模块用于国际化和本地化,它是 Python 标准库的一部分,通常会用 _ 来做不同的事情,比如...:

_ = gettext.gettext
# ...
print _('This is a translatable string.')

用来标记和翻译代码中的所有字符串消息(同时也利用了 _('...') 的视觉不显眼性)。显然,任何使用这个模块和这种用法的代码,都不应该再用 _ 来表示完全不同的意思(“一个不在乎的名字”)。

所以,另一个有用的选择是用 unused 这个名字来明确表示这种“不在乎”的情况,这样看起来更直观。谷歌的 Python 风格指南 推荐使用 _ 或者一个以 unused_ 开头的名字——后者虽然有点啰嗦,但通常非常清晰,例如:

name, unused_surname, salutation = person_data
print "Hello, %s %s!" % (salutation, name)

这就清楚地表明 person_data 是一个包含三个项目的序列(可能是一个元组),而你跳过的那个项目(完全不使用)是姓氏(因为你想打印一个友好的消息,比如“你好,亚历克斯先生!”或者“你好,皮吉小姐!”;-)。 (pylint 和类似的工具会提醒你,如果你有未使用的变量名不是 _unused_...,当然也会提醒你如果你真的使用了一个名为 unused_something 的变量!-)

撰写回答