2017-06-04 5 views
-1

Nun, schrieb ich diese Funktion:Wie funktioniert man mit zwei verschiedenen Parametern aus den Listen?

def hydrostatic_pressure(altitude, density, number_stages, direction): 
    i=0 
    hydro_pressure=[] 
    print(number_stages) 
    while i < number_stages: 
     if direction[i] == True: # направление вверх от РО 
      hydro_pressure[i]=density*altitude[i]*9.8 # 9.8 - g, константа 

     else: 
      hydro_pressure[i]=-1*density*altitude[i]*9.8 # вниз от РО 
     i +=1 
    return hydro_pressure 

und dies ist ein Funktionsaufruf:

list_hydrostat=hydrostatic_pressure(*scheme[4][5][2], enviroment[2], scheme[4][5][3], *scheme[4][5][1]) 

Wo: * scheme [4] [5] [2] und * Schema [4] [5] [1] - Liste mit variabler Anzahl von Elementen

habe ich diesen Fehler:

TypeError: hydrostatic_pressure() takes 4 positional arguments but 6 were given 

Also, wie man einen richtigen Anruf tätigt?

+0

Ich verstehe nicht, warum Sie den '*' Operator dort verwenden. Wenn es sich um Listen handelt und die Funktion Listen für diese Parameter erwartet, übergeben Sie sie einfach so, wie sie sind. –

+0

Wenn Ihre Frage beantwortet wurde: https://stackoverflow.com/help/someone-answers –

Antwort

0

Entfernen Sie die *.

list_hydrostat=hydrostatic_pressure(scheme[4][5][2], 
            enviroment[2], 
            scheme[4][5][3], 
            scheme[4][5][1]) 

In C, verwenden Sie den * Operator zu dereferenzieren die Elemente in einer Liste.

In Python wird die Dereferenzierung automatisch für Sie durchgeführt. Auch in Python hat * eine andere Bedeutung. In diesem Szenario ist es der Entpacker, was bedeutet, dass er die Elemente einer Liste entpackt und sie alle als Argumente übergibt, die Sie nicht wollen.

Als Übung können Sie rund um die Argumente in Ihrer Funktion Signatur ändern, wie zum Beispiel:

def hydrostatic_pressure(density, direction, altitude, number_stages): 
    ... 

Jetzt ist Ihre Funktion wie folgt aufrufen:

list_hydrostat=hydrostatic_pressure(enviroment[2], 
            *scheme[4][5][1:4]) 

Sie werden es sehen funktioniert das Gleiche.

+0

Nun, es ist interessante Übungen, danke. – Lomil

0

Wie Daniel Rosman und Shiva sagte * Betreiber nicht erforderlich ist. Und auch ich habe einen Fehler in Zeile hydro_pressure[i]=density*altitude[i]*9.8, weil hydro_pressure eine leere Liste ohne Indizes ist. Es ist notwendig, Generator hydro_pressure = [i*0 for i in range(0, len(direction))] (Richtung ist eine Liste) zu verwenden

Verwandte Themen