generator.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from typing import Generator
  2. def test_1():
  3. s = [1, 2, 3, 4, 5]
  4. d = iter(s)
  5. print(next(d))
  6. print(next(d))
  7. def test_2():
  8. # Выражение-генератор
  9. b = (i**2 for i in range(1, 6))
  10. # Обойти можно только один раз
  11. # Не хранится в памяти
  12. print(dict(b))
  13. # print(sum(b))
  14. def test_3():
  15. weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
  16. days = ((i, weekdays[(i + 4)%7]) for i in range(1, 78))
  17. for _ in range(1, 78):
  18. print(next(days))
  19. # test_3()
  20. # Функция генератор
  21. def genf():
  22. s = 7
  23. for i in range(10):
  24. yield i # Замораживает функцию в этом месте
  25. print(s)
  26. s = s*10 + 7
  27. def fact(n):
  28. pr = 1
  29. for i in range(1, n + 1):
  30. pr = pr*i
  31. yield pr
  32. # for i in fact(10):
  33. # print(i, end=' ')
  34. # Generator[yield_type, send_type, return_type]
  35. def echo_round() -> Generator[int, float, str]:
  36. res = yield
  37. while res:
  38. res = yield round(res)
  39. return 'OK'
  40. def gen_squares(n):
  41. for i in range(1, n + 1):
  42. yield i**2
  43. # for i in gen_squares(5):
  44. # print(i)
  45. def gen_fibonacci_numbers(n):
  46. first = 0
  47. second = 1
  48. for i in range(0, n):
  49. s = first + second
  50. second = first
  51. first = s
  52. yield s
  53. # for i in gen_fibonacci_numbers(10):
  54. # print(i)
  55. def my_range_gen(n):
  56. pass