병행성


병행성, 병렬성

# 병행성

# Generator ex1
def generator_ex1():
    print('Start')
    yield 'A point'
    print('Continue')
    yield 'B Point'
    print('End')
    
temp = iter(generator_ex1())

print(temp)
print(next(temp)) # A Point 까지
print(next(temp)) # B Point 까지
# print(next(temp)) # End 그리고 예외로 StopIteration

for v in generator_ex1():
    pass
    # print(v)

# Generator ex2

temp2 = [x * 3 for x in generator_ex1()] # ['A pointA pointA point', 'B PointB PointB Point']
temp3 = (x * 3 for x in generator_ex1()) # <generator object <genexpr> at 0x000002E911D61970>

print(temp2)
print(temp3) # 제너레이터형만 남기에..

for i in temp3:
    print(i)

튜플로 보통 처리하는 소괄호는 여기서 제너레이터 형만 나온다. 이 점은 전에 학습을 통해서 배운 부분이다. 내가 기억해야할 부분이다.

itertools

# 조건
gen2 = itertools.takewhile(lambda n : n < 1000, itertools.count(1, 2.5))

# for v in gen2:
#     print(v)

# 필터의 반대
gen3 = itertools.filterfalse(lambda n : n < 3, [1,2,3,4,5])

# for v in gen3:
#     print(v)

# 누적 합계
gen4 = itertools.accumulate([x for x in range(1, 101)]) # 1부터 100까지 더하는 값 누적 합계

# for v in gen4:
#     print(v)

# 연결 1
gen5 = itertools.chain('ABCDE', range(1,11,2)) # ['A', 'B', 'C', 'D', 'E', 1, 3, 5, 7, 9]
print(list(gen5))

# 연결 2
gen6 = itertools.chain(enumerate('ABCDE')) # [(0, 'A'), (1, 'B'), (2, 'C'), (3, 'D'), (4, 'E')]

print(list(gen6))

# 개별
gen7 = itertools.product('ABCDE') # [('A',), ('B',), ('C',), ('D',), ('E',)]
print(list(gen7))

# 연산 (경우의 수)
gen8 = itertools.product('ABCDE', repeat=2)
print(list(gen8))

# 그룹화
gen9 = itertools.groupby('AAABBCCCCDDEEEE')
# print(list(gen9))

for chr, group in gen9:
    print(chr, ' : ', list(group))

그룹화랑 연산은 좋다.