1
0

51_yield.py 1.8 KB

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