2017-11-21 4 views
-1

Der Versuch, diesen Code in Python3 Jupyter Notebook auszuführen:namedtuple benötigt 3 Argumente?

t = namedtuple('a', 'b') 
a = [1,0,1] 
b = [1,1,1] 
Out, In = np.asanyarray(a), np.asanyarray(b) 
t(Out.shape[0], *In.shape) 

Fehler zurückkehrt:

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-151-7955ff03a60d> in <module>() 
     3 b = [1,1,1] 
     4 Out, In = np.asanyarray(a), np.asanyarray(b) 
----> 5 t(Out.shape[0], *In.shape) 

TypeError: __new__() takes 2 positional arguments but 3 were given 

ist möglich namedtuple mit zwei Argumenten zu schaffen?

Update:

Warum funktioniert das nicht ähnliches Problem verursachen:

t = namedtuple('ps', 'Out In S') 

a = np.asanyarray([[1]]) 
b = np.asanyarray([[1]]) 

d = t(a.shape[0], *b.shape) 

d 

berechnet:

ps(Out=1, In=1, S=1) 

Update 2:

glaube, ich verstehe jetzt namedtuple('ps', 'Out In S') übersetzt namedtuple('name_of_tuple', 'tuple_values_seperated_by_spaces')

+2

Das erste Argument von named Tupel, ist der Name des benannten Tupel, nicht die Argumente. –

+1

Sie verwenden das 'namedtuple' falsch. [Überprüfen Sie die Dokumentation, was die Parameter sein sollten] (https://docs.python.org/3/library/collections.html#collections.namedtuple). – poke

Antwort

3

Das erste Argument des benannten Tupelkonstruktors ist typename: der Name des benannten Tupels, nicht die Argumente. [documentation]

So sollten Sie bauen t wie:

#     v parameters 
t = namedtuple('t', ('a', 'b')) 
#   ^type name

Um es bequemer zu machen, können Sie auch ein Raum bieten Reihe von Parametern getrennt. So ein Äquivalent ist:

+0

siehe Frage Update –

Verwandte Themen