What is the pythonic way to unpack tuples as function arguments? [duplicate]
Asked Answered
U

2

114

This is ugly. What's a more Pythonic way to do it?

import datetime

t= (2010, 10, 2, 11, 4, 0, 2, 41, 0)
dt = datetime.datetime(t[0], t[1], t[2], t[3], t[4], t[5], t[6])
Ultun answered 10/2, 2010 at 16:14 Comment(1)
You may want to read about it in the docs: docs.python.org/tutorial/…Juvenescent
I
158

Generally, you can use the func(*tuple) syntax. You can even pass a part of the tuple, which seems like what you're trying to do here:

t = (2010, 10, 2, 11, 4, 0, 2, 41, 0)
dt = datetime.datetime(*t[0:7])

This is called unpacking a tuple, and can be used for other iterables (such as lists) too. Here's another example (from the Python tutorial):

>>> range(3, 6)             # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> range(*args)            # call with arguments unpacked from a list
[3, 4, 5]
Impurity answered 10/2, 2010 at 16:15 Comment(5)
It works for arbitrary iterables.Scholar
I'd like to add that this syntax works anywhere (not just in function calls) in python 3.5, so for instance statements like x, y, z = *(1, 2, 3) will work without error (as it should have been a long time ago)Conform
it there a way to do this among other list items? like my_tuple = ("B", "C"); "%s %s %s" % ("A", *my_tuple)?Stan
Nevermind - I think this is a limitation of the %s string substitution method. Using "{} {} {}".format("A", *my_tuple) instead does the trick.Stan
Does anyone know any details about how Python implements unpacking internally?Azine
G
16

Refer https://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists

 dt = datetime.datetime(*t[:7])
Grumble answered 10/2, 2010 at 16:15 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.