Python - как переменная из этой функции проходит через словарь? - PullRequest
0 голосов
/ 12 апреля 2020

Мне трудно понять одну часть кода ниже. Мне удалось понять это правильно на онлайн-уроке, поэтому я не ищу помощи в его завершении, просто понимаю это: в последнем сегменте кода я запутался в том, как 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

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020

prices - словарь, отображение ключей (банан, яблоко, ...) на значения (4, 2, ...).

for x in food означает «Для каждого элемента в предоставленный список с именем food, присвойте ему временную переменную x и сделайте что-нибудь с x. "

total = total + prices[x] означает" Присвоить текущее значение total, добавленное к цене item x (поднял взгляд от цен) ". Для первого элемента в food (банан в данном случае) вы ищете соответствующую цену в prices (что равно 4). Итак, вы действительно говорите total = 0 + 4, затем переходите к следующему пункту в food. Поскольку total теперь установлено на 4, ваше назначение становится total = 4 + price['orange'] или 4 + 1.5. Как только список будет полностью повторен, у вас будет сумма total (7,5 в вашем примере).

0 голосов
/ 12 апреля 2020

Python dictionaries (и другие python структуры данных) реализуют так называемый шаблон iterator , который принимает по одному элементу за раз, по порядку, пока не пройдет весь структура данных.

В словарях реализован слот tp_iter, который возвращает эффективный итератор, который перебирает ключи словаря. Во время такой итерации словарь не должен изменяться, за исключением того, что разрешено задание значения для существующего ключа (удаление или добавление запрещены, а также метод update ()). Это означает, что мы можем записать

for k in dict: ...

, что эквивалентно, но намного быстрее, чем

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

до тех пор, пока ограничение изменения в словаре (либо с помощью l oop, либо с помощью другого потока) не нарушаются.

Код: for x in food: просто вставляет iterator в python dict и вызывает его несколько раз, чтобы получить следующий элемент до последнего элемента.

Вот как это работает в python (и других языках также). Python знает, что в dict реализованы циклы iterator и for, вызывающие этот итератор.

...