2016-05-18 4 views
1

I String bin erforschen in Funktionen der Formatierung können so sagen, wir haben diese einfache und hässlich Funktion:Formatstrings in Funktionen

def my_string(z,a,b): 
    return '%d' '%s' '%s' % (z, a, b) 

z = 1 
x = ['monkey', 'monkey2', 'monkey3'] 
y = ['banana', 'banana2', 'banana3'] 

for item in x and y: 
    print my_string(z, x, y) 

Ich erwarte dies Druck:

1 monkey banana 
1 monkey2 banana2 
1 monkey3 banana3 

Aber es ist Rückkehr:

1['monkey', 'monkey2', 'monkey3']['banana', 'banana2', 'banana3'] 
1['monkey', 'monkey2', 'monkey3']['banana', 'banana2', 'banana3'] 

ich nicht auf der Erde verstehen, warum die Rückkehr ist wie es ist und nicht, wie ich erwarte, dass essein,wird tatsächlich das erste Element von x drucken, das monkey ist. Wo denke ich falsch?

+0

'für Item in x und y' macht wahrscheinlich nicht das, was Sie denken, es tut, entweder (es ist äquivalent zu' für Artikel in x'). – kindall

+0

Vielleicht füllen Sie uns aus, was Sie aus diesem Code wollen. Sie sagen, was Sie erwarten. Wenn Sie uns mitteilen, was Sie erreichen möchten, könnten wir Ihnen wahrscheinlich eine elegantere Lösung zeigen. – vikingben

+0

danke für deine Erklärungen, es macht Sinn .. 'my_string' ist in der Tat eine URL-Anfrage mit Daten und Parameter, wo ich möchte params in die Funktion mit String-Formatierung Schleifen –

Antwort

1

Es funktioniert nicht, weil Sie mit jeder Schleife drucken x und y Ihre Listen und nicht die Elemente in den Listen sind. Versuchen Sie diesen Code:

def my_string(z,a,b): 
    return '%d ' '%s ' '%s' % (z, a, b) 

z = 1 
x = ['monkey', 'monkey2', 'monkey3'] 
y = ['banana', 'banana2', 'banana3'] 

for item1,item2 in zip(x, y): 
    print my_string(z, item1, item2) 

zip Sie über zwei Listen gleichzeitig iterieren ermöglicht durch ein Tupel zurück. Weitere Informationen hierzu finden Sie unter here.