2017-05-19 1 views
3

Ich möchte Funktion mit Standard und mehreren Argumenten schreiben. Jetzt habe ich so some:Wie kann ich mehrere und optionale Argumente in Python mischen?

def make_pizza(size=10, *toppings): 
    for t in toppings: 
     print("-",t) 

    print('Pizza has', size, 'cm') 

und später versuche ich zu nennen:

make_pizza(30, 'pepperoni') 
make_pizza('pepperoni') 
make_pizza(50, 'cheese', 'cucumber', 'chilli') 

aber die Ergebnisse sieht schlecht aus:

- pepperoni Pizza has 30 cm Pizza has pepperoni cm - cheese - cucumber - chilli Pizza has 50 cm

Was soll ich tun, wenn ich will '10' statt Peperoni in der dritten Zeile drucken?

Antwort

4

Nun, da Sie mit Python sind 3, ist die einfachste size ein keyword-only argument haben:

def make_pizza(*toppings, size=10): 
    for t in toppings: 
     print("-",t) 

    print('Pizza has', size, 'cm') 

Beachten Sie, wie die size=10 der *toppings folgen müssen.

nun angeben, die size Sie müssen es nennen ausdrücklich:

make_pizza('pepperoni') 
make_pizza('pepperoni', size=30) 

Eine weitere Alternative, die Typ von size zu prüfen wäre, und wenn es eine Instanz numbers.Number ist sagen, dann nehme an, es ist die Größe, sonst ist es ein Topping und sollte am Anfang des toppings Tupels hinzugefügt werden ... und die Größe sollte auf den Standardwert zurückgesetzt werden.

Oder Sie könnten immer die Größe angeben.

Allerdings würde ich die Argumente nur mit Schlüsselwörtern bevorzugen, da dies genau die Art von Problem ist, das sie lösen sollten.

+1

Beat mich dazu! Dies ist hier zuerst und ist die richtige Antwort. Also +1 – Lost

+0

Hallo. Vielen Dank für die Antwort, ich habe es früher versucht, und das Problem war mit '50' auf Ingridients Liste, also danke für die Lösung;) – Artek

Verwandte Themen