2017-06-04 40 views
-1

嗯,我寫了這個功能:如何使用兩個不同的參數從列表中取得功能?

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 

,這是一個函數調用:

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

其中: *方案[4] [5] [2]和*方案[4] [5] [1] - 列表,包括元素

的可變數量我得到這個錯誤:

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

那麼,如何進行正確的呼叫?

+0

我不明白你爲什麼在那裏使用'*'操作符。如果它們是列表,並且函數期望這些參數的列表,則只需按原樣傳遞它們即可。 –

+0

如果你的問題得到解答:https://stackoverflow.com/help/someone-answers –

回答

0

刪除*

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

在C語言中,使用*運營商取消引用列表中的元素。

在Python中,取消引用是爲您自動完成的。另外,在Python中,*具有不同的含義。在這種情況下,它是解包操作符,這意味着它將解壓列表中的元素並將它們全部作爲參數傳遞,而這些參數是您不需要的。

作爲練習,你可以在你的周圍函數簽名的參數改變,因爲這樣:

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

現在打電話給你的功能是這樣的:

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

你會看到它工作得一樣。

+0

嗯,這是有趣的練習,謝謝。 – Lomil

0

丹尼爾·羅斯曼溼婆說,不需要*運營商。還有我在hydro_pressure[i]=density*altitude[i]*9.8錯誤,因爲hydro_pressure是一個沒有索引的空列表。有必要使用發生器hydro_pressure = [i*0 for i in range(0, len(direction))](方向是一個列表)

相關問題