Ich möchte eine Funktion, die normalerweise ein Argument vom Typ X übernimmt, wobei X entweder ein Skalar, eine Liste oder ein Diktat ist, und eine Liste von X mit denselben Schlüsselwerten basierend auf anderen Informationen zurückgibt.Die beste Methode, um in Python zwischen skalaren, Listen- und dict-Argumenten zu unterscheiden?
def foo(info, k):
return [bar(item,k) for item in processInfo(info)]
def bar(item, keydata):
# pseudocode follows.
# What we want to do is return an output of parallel type to the input key k,
# using the key data to lookup information from the input item.
if keydata is a scalar:
return item[keydata]
elif keydata is a list:
return [item[k] for k in keydata]
elif keydata is a dict:
return dict((k,item[v]) for (k,v) in keydata.iteritems())
else:
raise ValueError('bar expects a scalar, list, or dict')
Meine Frage ist, wie kann ich zwischen den drei Arten versenden?
edit: Eine Zeichenfolge ist als Skalar zu interpretieren, nicht als Liste/iterierbar. Tupel sind als iterierbar zu interpretieren.
bearbeiten 2: Ich möchte Ente tippen, nicht streng Typisierung.
Was ist, wenn ein Objekt sowohl das Verhalten einer Liste als auch eines Diktats anzeigen kann? – Meitham
dann hat das Verhalten für dict-ähnliche Elemente Vorrang vor dem Verhalten für iterierbare Elemente –
Diese Frage muss umbenannt werden, da sie die beste ist, um den Unterschied zwischen dict und list zu bestimmen, nicht nur zwischen skalar und nicht skalar. Ich überspringe es bei Suchanfragen. – SystemParadox