簡體   English   中英

Python - 這個 function 中的變量如何通過字典進行?

[英]Python - how does a variable from this function progress through a dictionary?

我很難理解下面代碼的一部分。 我能夠在在線課程中正確理解它,所以我不是在尋求幫助來完成它,只是理解這一點:在最后一段代碼中,我對xfood的工作方式感到困惑。 x 如何處理價格中的項目?

shopping_list = ["banana", "orange", "apple"]

stock = {
  "banana": 6,
  "apple": 0,
  "orange": 32,
  "pear": 15
}

prices = {
  "banana": 4,
  "apple": 2,
  "orange": 1.5,
  "pear": 3
}

def compute_bill(food):
  total = 0
  for x in food:
    total = total + prices[x]
  return total

Python dictionaries (和其他 python 數據結構)實現了所謂的iterator模式,它按順序一次取一個項目,直到遍歷整個數據結構。

字典實現了一個 tp_iter 槽,它返回一個高效的迭代器,該迭代器對字典的鍵進行迭代。 在這樣的迭代期間,不應修改字典,除非允許為現有鍵設置值(刪除或添加不允許,update() 方法也不允許)。 這意味着我們可以寫

for k in dict: ...

這相當於,但比

for k in dict.keys(): ...

只要不違反對字典修改的限制(通過循環或另一個線程)。

代碼: for x in food:只需在 python dict中初始化iterator並重復調用它以獲取下一項直到最后一項。

這就是它在 python(以及其他語言)中的工作方式。 Python 內部知道dict實現了一個iteratorfor循環在下面調用這個迭代器。

prices是一個字典,是鍵(香蕉、蘋果、...)到值(4、2、...)的映射。

for x in food意思是“對於提供的名為food的列表中的每個項目,給它一個臨時變量賦值x並用x做一些事情。”

total = total + prices[x]表示“將total的當前值分配給項目x的價格(從價格中查找)”。 對於food中的第一項(在本例中為香蕉),您正在尋找相應的價格prices (即 4)。 因此,您實際上是在說total = 0 + 4 ,然后轉到food中的下一項。 由於total現在設置為 4,因此您的分配變為total = 4 + price['orange']4 + 1.5 列表完全迭代后,您就有了一個total (在您的示例中為 7.5)。

暫無
暫無

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

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