45_yield.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. def f(n):
  2. for i in range(n):
  3. yield i
  4. x = 0
  5. for j in f(5):
  6. x += j
  7. assert x == 10
  8. a = [i for i in f(6)]
  9. assert a == [0,1,2,3,4,5]
  10. def f(n):
  11. for i in range(n):
  12. for j in range(n):
  13. yield i, j
  14. a = [i for i in f(3)]
  15. assert len(a) == 9
  16. assert a[0] == (0,0)
  17. assert a[1] == (0,1)
  18. assert a[2] == (0,2)
  19. assert a[3] == (1,0)
  20. assert a[4] == (1,1)
  21. assert a[5] == (1,2)
  22. assert a[6] == (2,0)
  23. assert a[7] == (2,1)
  24. assert a[8] == (2,2)
  25. def g():
  26. yield from [1, 2, 3]
  27. def f():
  28. yield from g()
  29. a = [i for i in f()]
  30. assert a == [1, 2, 3]
  31. def f(n):
  32. for i in range(n):
  33. yield i
  34. for j in range(i):
  35. yield j
  36. t = f(3)
  37. assert list(t) == [0, 1, 0, 2, 0, 1]
  38. def f(n):
  39. for i in range(n):
  40. if i == n-1:
  41. raise ValueError
  42. yield i
  43. t = f(3)
  44. t = iter(t)
  45. assert next(t) == 0
  46. assert next(t) == 1
  47. try:
  48. next(t)
  49. exit(1)
  50. except ValueError:
  51. pass
  52. try:
  53. next(t)
  54. exit(1)
  55. except StopIteration:
  56. pass
  57. def f():
  58. yield 1
  59. yield 2
  60. return
  61. yield 3
  62. assert list(f()) == [1, 2]
  63. src = '''
  64. def g():
  65. yield 1
  66. yield 2
  67. return 3
  68. yield 4
  69. '''
  70. try:
  71. exec(src)
  72. exit(1)
  73. except SyntaxError:
  74. pass