簡體   English   中英

Python 評論:為什么代碼 1 產生的結果與代碼 2 不同?

[英]Python Review: Why doesn't code 1 produce same result as code 2?

為什么代碼 1 輸出 28(不是我想要的)而代碼 2 輸出 [7, 14, 21, 28] (我想要的)?

#Code 1
def dog_years(age):
    return age * 7

def my_pets_age(func, param_list):
    for i in param_list:
        func(i)    
    return func(i)
    
dog_age = my_pets_age(dog_years, [1, 2, 3, 4]) 

print(dog_age)

有沒有辦法讓我寫這個,這樣我就不需要用空數組創建結果變量?

#Code 2
def dog_years(age):
    return age * 7

def my_pets_age(func, param_list):
    result = []
    for i in param_list:
        result.append(func(i))
    return result

dog_age = my_pets_age(dog_years, [1, 2, 3, 4]) 

print(dog_age)

在代碼 1 中,您沒有在每次迭代的任何地方存儲func(i)返回的值。 該值被計算出來,然后就被扔掉了。 然后,一旦循環完成, i值為4因為這是param_list的最后一個值,因此您返回func(4) ,即 28。

在第二個代碼中,您實際上是通過將中間值附加到結果數組來存儲中間值。

您可以將第二個代碼重寫為:

def my_pets_age(func, param_list):
    return [func(i) for i in param_list]

看看你的代碼#1。 你在哪里使用循環中func調用的結果? (提示:你沒有)

信息離開函數的方式只有四種:

  1. 通過return
  2. (對於生成器)通過yield表達式
  3. 通過引發異常
  4. 通過更改外部狀態(存儲到全局變量、外部對象的屬性或self等)

唯一一個適用於任一示例的是 #1。 在第一個代碼塊中,除了對i的賦值之外,您忽略在循環中所做的一切,因此它所做的只是返回func(i) ,其中i是循環的最后一個值。 在第二個代碼塊中,您構建一個包含所有結果的list並返回該list ,因此您可以獲得所有結果,而不僅僅是最后一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM