Python - 元组分配是否有“不关心”的符号?

时间:2010-04-30 13:59:31

标签: python syntax

给定一个字符串“VAR = value”我想(仅)在第一个'='符号(< value>可能包含更多'='符号)中拆分它,类似于这样:

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

有没有办法不声明变量'sep'?像这样(只是编写语法):

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

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

9 个答案:

答案 0 :(得分:45)

_确实是“无关紧要的名字”的一个非常受欢迎的选择 - 它是一个合法的名称,在视觉上不引人注目等等。但有时这些品质可能会阻碍你。例如,I18N和L10N的GNU gettext模块,它是Python标准库的一部分,惯用于_非常不同,使用诸如......之类的习语:

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

标记并翻译代码中的所有文字字符串消息(也利用_('...')的相对视觉不引人注意。显然,使用此模块和习惯用法的任何代码都不应该使用_来意思是完全不同的东西(“一个不关心的名字”)。

因此,第二个有用的替代方案可以是将名称unused用于以视觉上更明确的方式指示这种“不关心”的情况。 Google的python style guide建议使用_unused_前缀 - 后者可能有点冗长,但往往非常明确,例如:

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

清楚地表明person_data是一个三项目序列(可能是一个元组),而你正在跳过的项目(根本不使用)是姓氏(因为你想打印一个友好的消息)比如“你好,先生亚历克斯!”或“你好,小猪小姐!”;-)。 (pylint和类似工具可以警告您,如果您有未使用的_unused_...以外的变量,当然也会警告您 一个名为unused_something的变量! - )。

答案 1 :(得分:14)

几乎就在那里:

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

_通常被视为无关变量。

答案 2 :(得分:4)

该语言中没有任何正式的内容;你可以使用任何抛弃变量。就标准而言,我已经看到过在Python和其他语言中偶尔使用的下划线。唯一的问题是,在本地化时,下划线用作gettext的别名。但是如果你没有进行本地化,或者没有使用全局绑定,那么下划线应该可以正常工作。

答案 3 :(得分:3)

非常奇怪的问题,因为你可以做到:

var, _, value = s.partition(sep)

并且不关心_变量,但_只是sep的名称,varvalue。顺便使用str.split

>>> var, value = "VAR=value".split('=')
>>> var, value
('VAR', 'value')
>>> 

答案 4 :(得分:2)

为什么不使用'VAR=value'.split('=')?这无视分隔符。

编辑(以便在评论中提供Cristi的例子):

来自Diving into Python

  

提示: anystring .split( delimiter ,1)是一个   你想要的有用技巧   在字符串中搜索子字符串和   然后在之前处理所有事情   substring(最终在第一个   返回列表的元素)和   一切都在它之后(最终进入   第二个元素)。

答案 5 :(得分:2)

  • Python没有语法来避免在解包等中进行赋值。

  • 正如其他人所提到的,有一种惯例是将_用于您不关心的变量。这被广泛使用和理解,但我个人认为它未得到充分利用。如果您说var, _, value = "VAR=value".partition('='),您必须知道在您阅读代码时,_是什么以及您不关心它的原因。如果你说var, sep, value你同时记录。这对于str.partition来说并不是很重要,但我之前看过_, _, name, _, city, _ = some_weird_function()并发现它没有比将所有内容解压缩到有用的名称更有用。

  • 如果您愿意,可以在技术上使用str.splitvar, value = "foo=bar=baz".split("=", 1)

答案 6 :(得分:1)

_通常用作你的名字不关心 *例如,在我们只对名字和姓氏感兴趣的时刻,在包含姓名,姓氏和昵称的元组中,可以使用_来表示此时名称不重要:

data = ('John', 'Mate', 'Little John')
name, surname, _ = data

答案 7 :(得分:0)

正如其他人所说,下划线(_)是标准。但如果使用下划线进行翻译,我认为双下划线是最好的选择。

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

比这些更好:

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

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

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

答案 8 :(得分:0)

还可以选择使用索引:

a, b = my_list[0, 2]