51_yield.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. def g():
  2. yield 1
  3. yield 2
  4. a = g()
  5. assert next(a) == 1
  6. assert next(a) == 2
  7. try:
  8. next(a)
  9. exit(1)
  10. except StopIteration:
  11. pass
  12. def f(n):
  13. for i in range(n):
  14. yield i
  15. x = 0
  16. for j in f(5):
  17. x += j
  18. assert x == 10
  19. a = [i for i in f(6)]
  20. assert a == [0,1,2,3,4,5]
  21. def f(n):
  22. for i in range(n):
  23. for j in range(n):
  24. yield i, j
  25. a = [i for i in f(3)]
  26. assert len(a) == 9
  27. assert a[0] == (0,0)
  28. assert a[1] == (0,1)
  29. assert a[2] == (0,2)
  30. assert a[3] == (1,0)
  31. assert a[4] == (1,1)
  32. assert a[5] == (1,2)
  33. assert a[6] == (2,0)
  34. assert a[7] == (2,1)
  35. assert a[8] == (2,2)
  36. def g():
  37. yield from [1, 2, 3]
  38. def f():
  39. yield from g()
  40. a = [i for i in f()]
  41. assert a == [1, 2, 3]
  42. def f():
  43. for i in range(5):
  44. yield str(i)
  45. assert '|'.join(f()) == '0|1|2|3|4'
  46. def f(n):
  47. for i in range(n):
  48. yield i
  49. for j in range(i):
  50. yield j
  51. t = f(3)
  52. assert list(t) == [0, 1, 0, 2, 0, 1]
  53. def f(n):
  54. for i in range(n):
  55. if i == n-1:
  56. raise ValueError
  57. yield i
  58. t = f(3)
  59. t = iter(t)
  60. assert next(t) == 0
  61. assert next(t) == 1
  62. try:
  63. next(t)
  64. exit(1)
  65. except ValueError:
  66. pass
  67. try:
  68. next(t)
  69. exit(1)
  70. except StopIteration:
  71. pass
  72. def f():
  73. yield 1
  74. yield 2
  75. return
  76. yield 3
  77. assert list(f()) == [1, 2]
  78. def g():
  79. yield 1
  80. yield 2
  81. return 3
  82. yield 4
  83. assert StopIteration().value == None
  84. assert StopIteration(3).value == 3
  85. try:
  86. iter = g()
  87. assert next(iter) == 1
  88. assert next(iter) == 2
  89. next(iter) # raises StopIteration
  90. print('UNREACHABLE!!')
  91. exit(1)
  92. except StopIteration as e:
  93. assert e.value == 3
  94. def f():
  95. a = yield from g()
  96. yield a
  97. assert list(f()) == [1, 2, 3]