Mam następującą funkcję, która zwraca dane:

def get_comments():
 for i in data:
  comment_data = i['comments']
  for z in comment_data:
   comments = comment_data['data']
   for j in comments:
    comment = j['message']
    print(comment)

Chciałbym zapisać wyjście tej funkcji zmiennej. Używam drukowania zamiast zwrotu (w funkcji Get_Comments) Ponieważ zwrot tylko zwraca ostatni wiersz moich danych. To właśnie próbowałem wyjaśnić to:

def hypothetical(x):
return x

z = hypothetical(get_comments())
print(z)

Jednak wyjście zmiennej Z jest "Brak".

Kiedy próbuję innej wartości (tj.):

 z = hypothetical(5)
 print(z)

Z jest oczywiście równy 5.
Dzięki

0
Chris Solomou 4 sierpień 2020, 15:45

1 odpowiedź

Najlepsza odpowiedź

Zamiast drukowania każdej linii, musisz dodać go do innej struktury danych (takich jak lista) i zwróć całą listę na końcu get_comments().

Na przykład:

def get_comments():
  to_return = []
  for i in data:
    comment_data = i['comments']
    for z in comment_data:
      comments = comment_data['data']
      for j in comments:
        comment = j['message']
        to_return.append(comment)
  return to_return

Jeśli chcesz uzyskać nieco bardziej zaawansowany, możesz zamiast tego utworzyć generator za pomocą yield:

def get_comments():
  for i in data:
    comment_data = i['comments']
    for z in comment_data:
      comments = comment_data['data']
      for j in comments:
        comment = j['message']
        yield comment

Następnie możesz iterować nad get_comments() i wraca do generatora za każdym razem, aby uzyskać następny komentarz. Możesz też po prostu rzucić generator do listy z list(get_comments()), aby wrócić do żądanej listy komentarzy.

Patrz Ta doskonała odpowiedź Więcej o yield i generatorów.

5
Tom Burrows 4 sierpień 2020, 13:01