45_yield.py 1.4 KB

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