2010-02-10 22 views
77

Bu çok çirkin. Bunu yapmak için daha çok Pythonic yolu nedir?Tupleleri paketlemenin pythonik yolu nedir?

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]) 
+5

bakın: İşte (Python tutorial itibaren) başka bir örnek http://docs.python.org/tutorial/controlflow.html # openpacking-argument-list –

cevap

111

Genel olarak, func(*tuple) sözdizimini kullanabilirsiniz.

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

Bu açma tuple denir ve (örneğin listeleri gibi) diğer Iterables için kullanılabilir: Hatta burada yapmaya çalıştığımız şey gibi görünüyor başlığın bir kısmını iletebilirsiniz çok.

>>> 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] 
+6

Rasgele yinelenen işler için çalışır. –

+2

Bu sözdiziminin python 3.5'deki herhangi bir yerde (yalnızca işlev çağrılarında değil) herhangi bir yerde çalıştığını eklemek istiyorum, bu nedenle örneğin x, y, z = * (1, 2, 3) gibi ifadeler hatasız olarak çalışır ( – Nearoo

+0

uzun bir zaman önce olmalıydı, diğer liste öğeleri arasında bunu yapmak için bir yolu var mı? 'my_tuple = ("B", "C") gibi; "% s% s% s"% ("A", * my_tuple) '? – Dannid

İlgili konular