![](/img/trans.png)
[英]Python: Shouldn't these two pieces of code produce exactly the same result?
[英]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
調用的結果? (提示:你沒有)
信息離開函數的方式只有四種:
return
值yield
表達式self
等) 唯一一個適用於任一示例的是 #1。 在第一個代碼塊中,除了對i
的賦值之外,您忽略在循環中所做的一切,因此它所做的只是返回func(i)
,其中i
是循環的最后一個值。 在第二個代碼塊中,您構建一個包含所有結果的list
並返回該list
,因此您可以獲得所有結果,而不僅僅是最后一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.