开箱时是否可以指定默认值?
问题描述:
我有以下几点:开箱时是否可以指定默认值?
>>> 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
如果字符串没有任何空白。目前,我有以下,但我想知道是否可以在一个行完成:中即partition
代替split
splitted = myString.split(maxsplit=1)
first = splitted[0]
second = splitted[1:] or None
答
我建议你考虑使用不同的方法,:
>>> myString = "has spaces"
>>> left, separator, right = myString.partition(' ')
>>> left
'has'
>>> myString = "doesNotHaveSpaces"
>>> left, separator, right = myString.partition(' ')
>>> left
'doesNotHaveSpaces'
如果你是在python3,你有这样的选项可供选择:
>>> myString = "doesNotHaveSpaces"
>>> first, *rest = myString.split()
>>> first
'doesNotHaveSpaces'
>>> rest
[]
答
一般的解决办法是chain
你的迭代与01的个值,然后使用结果的islice
:
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
,如果你需要这种功能有很多,你可以把它变成像这样的功能:
def fill_iter(it, size, fill_value=None):
return islice(chain(it, repeat(fill_value)), size)
虽然最常见的用途是迄今为止的字符串,这就是为什么str.partition
存在。
答
你可以试试这个:
NUM2UNPACK=2
parts = myString.split()
first, second = parts+[None]*(NUM2UNPACK-(len(parts)))
这是不可能的,因为我知道,因为分割功能写到这样的。但是你可以使用if语句,比如字符串中是否有空格或者空格。 – pilkington
@wim - Python 3 – neverendingqs