2017-03-09 64 views
0

我想弄清楚如何在不使用return的情況下獲取square_each列表?通過函數修改參數

以下是具體細節:編寫和測試函數square_each(nums),其中nums是一個(Python)數字列表。它通過平方每個條目並替換其原始值來修改列表編號。你必須修改參數,不允許返回!

def square_each(nums): 
    for i in range(len(nums)): 
     nums[i]= int(nums[i]) * int(nums[i]) 
    return nums 

def sum_list(str_list): 
    x = sum(str_list) 
    return x 

def to_numbers(str_list): 
    for i in range(len(str_list)): 
     str_list[i] = eval(str_list[i]) 
    return str_list 

def main(): 
    file=open("numbers.txt").readline().split(" ") 
    print(to_numbers(file)) 
    print(square_each(file)) 
    print(sum_list(file)) 

main() 
+0

檢查file'的'值已執行的功能後。 –

回答

-1

你必須在全球範圍內宣佈nums

所以做這樣的

nums = [] # your array in global scope 

def square_each(): 
    # Now you can use original nums 
    global nums 
    for i in range(len(nums)): 
     nums[i]= int(nums[i]) * int(nums[i]) 
+0

由於指定了函數簽名,並且'nums'必須作爲參數傳遞,所以這不符合要求,是嗎? –

1

您可以使用list comprehension和玩Python和對象如何交易。它是neither call by value, nor call by reference

def square_each(num_list): 
    intermediate_list = [x**2 for x in num_list] 
    num_list.clear() # Removes all the elements of current list 
    num_list.extend(intermediate_list) # Adds processed elements to the original list 

這裏您需要在原地修改列表。

請注意,它比使用global或任何其他類似的東西更好,因爲它可以防止引入由於global關鍵字而可能引入的其他一組問題。

0

,你已經發布的功能square_each滿足您的條件:

def square_each(nums): 
    for i in range(len(nums)): 
     nums[i] = int(nums[i]) * int(nums[i]) 

l = [1, 2, 3] 
square_each(l) 
print(l) # output: [1, 4, 9]