解包时是否可以指定一个默认值?

2024-04-28 00:58:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下内容:

>>> myString = "has spaces"
>>> first, second = myString.split()
>>> myString = "doesNotHaveSpaces"
>>> first, second = myString.split()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack

如果字符串没有空格,我希望second默认为None。我目前有以下几点,但我想知道是否可以在一行中完成:

^{pr2}$

Tags: moststdinlinecallfilefirstspacessplit
3条回答

这里有一个通用的解决方案,解包元组,并在元组比预期短时使用默认值:

unpacker = lambda x,y=1,z=2:(x,y,z)

packed = (8,5)
a,b,c = unpacker(*packed)
print(a,b,c) # 8 5 2

packed = (8,)
a,b,c = unpacker(*packed)
print(a,b,c) # 8 1 2

Play with this code

我建议您考虑使用另一种方法,即partition而不是{}:

>>> myString = "has spaces"
>>> left, separator, right = myString.partition(' ')
>>> left
'has'
>>> myString = "doesNotHaveSpaces"
>>> left, separator, right = myString.partition(' ')
>>> left
'doesNotHaveSpaces'

如果您使用的是python3,则可以使用以下选项:

^{pr2}$

一般的解决方案是使用^{}值的^{}处理iterable,然后使用结果的^{}

from itertools import chain, islice, repeat

none_repat = repeat(None)
example_iter = iter(range(1)) #or range(2) or range(0)

first, second = islice(chain(example_iter, none_repeat), 2)

这将用None来填充缺少的值,如果您非常需要这种功能,可以将其放入如下函数中:

^{pr2}$

尽管到目前为止,最常见的用法是字符串,这就是^{}存在的原因。在

相关问题 更多 >