Is It Possible To Assign A Default Value When Unpacking?
I have the following: >>> myString = 'has spaces' >>> first, second = myString.split() >>> myString = 'doesNotHaveSpaces' >>> first, second = my
Solution 1:
May I suggest you to consider using a different method, i.e. partition
instead of split
:
>>>myString = "has spaces">>>left, separator, right = myString.partition(' ')>>>left
'has'
>>>myString = "doesNotHaveSpaces">>>left, separator, right = myString.partition(' ')>>>left
'doesNotHaveSpaces'
If you are on python3, you have this option available:
>>>myString = "doesNotHaveSpaces">>>first, *rest = myString.split()>>>first
'doesNotHaveSpaces'
>>>rest
[]
Solution 2:
A general solution would be to chain
your iterable with a repeat
of None
values and then use an islice
of the result:
from itertools import chain, islice, repeat
none_repat = repeat(None)
example_iter = iter(range(1)) #orrange(2) orrange(0)
first, second= islice(chain(example_iter, none_repeat), 2)
this would fill in missing values with None
, if you need this kind of functionality a lot you can put it into a function like this:
deffill_iter(it, size, fill_value=None):
return islice(chain(it, repeat(fill_value)), size)
Although the most common use is by far for strings which is why str.partition
exists.
Solution 3:
Here's one general solution to unpack tuple and use default value if tuple is shorter than expected:
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
Solution 4:
You could try this:
NUM2UNPACK=2
parts = myString.split()
first, second= parts+[None]*(NUM2UNPACK-(len(parts)))
Post a Comment for "Is It Possible To Assign A Default Value When Unpacking?"