[Python] ์ƒ์„ฑ๊ธฐ(generator)์™€ yield์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

2022. 4. 13. 11:35ยท๐Ÿ’ป Language/Python : ํŒŒ์ด์ฌ
728x90
728x90

1. ์ƒ์„ฑ๊ธฐ(generator)๋ž€?

์ œ๋„ˆ๋ ˆ์ดํ„ฐ๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ์ด ํ•จ์ˆ˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘์ง€ ์•Š๊ณ  ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ดํ„ฐ๋ ˆ์ดํ„ฐ(iterator)๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ํ•จ์ˆ˜ ์•ˆ์— ํ•˜๋‚˜ ์ด์ƒ์˜ yield ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • generator๋Š” iterableํ•œ ์ˆœ์„œ๊ฐ€ ์ง€์ •๋œ๋‹ค. (๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ˆœ์„œ๊ฐ€ ์žˆ์Œ)
  • ํ•„์š”์— ๋”ฐ๋ผ ๊ณ„์‚ฐ๋˜๊ธฐ ๋•Œ๋ฌธ์— '๋А์Šจํ•˜๊ฒŒ' ํ‰๊ฐ€๋œ๋‹ค. → ๊ฒŒ์œผ๋ฅธ ๋ฐ˜๋ณต์ž(lazy iterator)๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.
  • ๋ฌดํ•œํ•œ ์ˆœ์„œ๊ฐ€ ์žˆ๋Š”(๋ช…ํ™•ํ•œ ๋์ด ์—†๋Š”) ๊ฐ์ฒด(๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ)๋ฅผ ๋ชจ๋ธ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€ ๋กœ์ปฌ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๋‚ด๋ถ€ ์ƒํƒœ๊ฐ€ ๊ณ„์† ์œ ์ง€๋œ๋‹ค.
  • ์ž์—ฐ์Šค๋Ÿฌ์šด ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ, ๋ฐ์ดํ„ฐ ํ•˜๋‚˜๋‹น ์ถœ๋ ฅ์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์ด 1์ดˆ๋ผ๋ฉด ์ผ๋ฐ˜์ ์ธ ํ•จ์ˆ˜์—์„œ๋Š” (๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜ * 1์ดˆ)์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋  ๊ฒƒ์ด๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ 5๊ฐœ์ด๋ฉด 5์ดˆ ๋’ค 5๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•œ ๋ฒˆ์— ์ถœ๋ ฅ๋œ๋‹ค.

def default_func():
    default_data = []  # appendํ•  ๋ฆฌ์ŠคํŠธ
	for f in "12345":  # 5๊ฐœ์˜ data
		time.sleep(1)  # 1์ดˆ ๋Œ€๊ธฐ
		default_data.append(f)  # data append
	return default_data  # ๋ฐ˜ํ™˜
  
for i in default_func():  # fuction ํ˜ธ์ถœ
	print(i)

 

default_func ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ , for๋ฌธ์„ ํ†ตํ•ด ๋ฐ˜ํ™˜๋œ ๊ฐ’์„ ์ถœ๋ ฅํ•ด๋ณด๋ฉด,

# after 5 second
1
2
3
4
5

์‹คํ–‰ ์‹œ๊ฐ„ ๊ธฐ์ค€์œผ๋กœ 5์ดˆ๊ฐ€ ์ง€๋‚œ ๋’ค "12345"๊ฐ€ ๋™์‹œ์— ์ถœ๋ ฅ๋˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 5๊ฐœ์˜ ๋ฌธ์ž๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ๋Š” ํฐ ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ, ์ˆ˜๋งŒ ๊ฐœ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ˆ˜๋งŒ ์ดˆ์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋  ๊ฒƒ์ด๋‹ค. ์ด๋Ÿด ๋•Œ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ์žฅ์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์„๊นŒ?

 

def yield_func():
    for f in "12345":
        time.sleep(1)
        yield f
        
for i in yield_func():
    print(i)

์œ„์—์„œ ์ž‘์„ฑํ•œ default_func()์˜ ๊ธฐ๋Šฅ์„ yield๋ฅผ ์‚ฌ์šฉํ•œ generator๋กœ ๊ตฌํ˜„ํ•œ ๊ฒฐ๊ณผ์ด๋‹ค. ์ด ํ•จ์ˆ˜์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด,

 

# after 1 second
1
# after 1 second
2
# after 1 second
3
# after 1 second
4
# after 1 second
5

๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ 1์ดˆ๊ฐ€ ์†Œ์š”๋˜๋Š” ํ•จ์ˆ˜์—์„œ 5์ดˆ ๋’ค ๋ชจ๋“  ๊ฐ’์„ ํ•œ ๋ฒˆ์— ์ถœ๋ ฅํ•˜์ง€ ์•Š๊ณ  ๊ฐœ๋ณ„์ ์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค. 1์ดˆ๊ฐ€ ์†Œ์š”๋œ ํ›„ 1์ด ์ถœ๋ ฅ๋˜๊ณ , ๋‹ค์‹œ 1์ดˆ๊ฐ€ ์†Œ์š”๋œ ํ›„ 2๊ฐ€ ์ถœ๋ ฅ, ๋‹ค์‹œ 1์ดˆ๊ฐ€ ์†Œ์š”๋œ ํ›„ 3์ด ์ถœ๋ ฅ๋˜๋Š” ํ˜•์‹์œผ๋กœ 5๊นŒ์ง€ ์ถœ๋ ฅ๋œ๋‹ค. ๊ฒฐ๊ณผ๋ฅผ ๋‚˜๋ˆ„์–ด์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

์ œ๋„ˆ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ ์ด์ ์„ ์–ป๋Š”๋‹ค.

 

 

๋˜ํ•œ return์œผ๋กœ ๋ฐ˜ํ™˜ํ•  ๊ฒฝ์šฐ ๋ชจ๋“  ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค๋‘์—ˆ๋‹ค ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, yield ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒฐ๊ณผ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค๋‘๊ณ  ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์ œ๋„ˆ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ ์ธก๋ฉด์—์„œ ์ด์ ์„ ์–ป๋Š”๋‹ค.

 

 

๋•Œ๋ฌธ์— ์ œ๋„ˆ๋ ˆ์ดํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ํ•œ ๋ฒˆ์— ์˜ฌ๋ฆฌ๊ธฐ ๋ถ€๋‹ด์Šค๋Ÿฌ์šด ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ์„ ์ฝ๊ฑฐ๋‚˜, ์ŠคํŠธ๋ฆผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์ด ํ•„์š”ํ•  ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜์—ฌ ๋” ํšจ์œจ์ ์ธ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 


 

2. yield ํ‚ค์›Œ๋“œ๋ž€?

ํ•จ์ˆ˜์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ˜ํ™˜๊ฐ’์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•œ 'return' ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค. ํ•˜์ง€๋งŒ return๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋ฐ˜ํ™˜๋˜์ง€๋Š” ์•Š์œผ๋ฉฐ ๊ฒฐ๊ณผ๊ฐ’์„ ํ•œ ๋ฒˆ์— ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์—ฌ๋Ÿฌ ์ฐจ๋ก€์— ๋‚˜๋ˆ„์–ด ์ œ๊ณตํ•œ๋‹ค.

  • yield๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์ง€์‹œํ‚ค๊ณ  ํ˜„ ์ƒํƒœ๋ฅผ ์ €์žฅํ•œ๋‹ค. (return์€ ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒ์‹œํ‚ด)
  • ํ•จ์ˆ˜๊ฐ€ ์—ฐ์ด์–ด ์‹คํ–‰๋  ๋•Œ ๋‚ด๋ถ€์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด iterator ๋ฉ”์†Œ๋“œ(__iter__, __next__ ๋“ฑ)๊ฐ€ ์ž๋™์œผ๋กœ ์‹œํ–‰๋œ๋‹ค.
  • next() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์•„์ดํ…œ์„ ๋ฐ˜๋ณต(iterate)์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • yield๋กœ ์ƒ์„ฑํ•œ generator๋Š” iterableํ•œ ๊ฐ์ฒด๊ฐ€ ๋˜๋ฉฐ ๋ฐ˜๋ณต๋ฌธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

yield ํ‚ค์›Œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ํ•จ์ˆ˜์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•œ ํ›„ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ๊ฐ€ ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๋กœ ์‹คํ–‰์„ ๋„˜๊ธฐ๊ฒŒ ๋œ๋‹ค. ๋•Œ๋ฌธ์— yield๋Š” 'ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ์ˆ˜ ๋ฐ”๊นฅ์œผ๋กœ ์ „๋‹ฌ(๋ฐ˜ํ™˜)ํ•˜๋ฉด์„œ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์€ ํ•จ์ˆ˜ ๋ฐ”๊นฅ์— ์–‘๋ณดํ•œ๋‹ค'๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

โ–ถ yield from

Python 3.3๋ถ€ํ„ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ‚ค์›Œ๋“œ๋กœ, ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ œ๋„ˆ๋ ˆ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

>>> def default_generator():
...     a = [1, 2, 3]
...     for i in a:
...             yield i
... 
>>> gen = default_generator()
>>> list(gen)
[1, 2, 3]

yield๋ฅผ ์‚ฌ์šฉํ•œ ์ผ๋ฐ˜์ ์ธ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ์—์„œ๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋ณด๋‚ผ ์ˆ˜ ์—†์Œ)

 

>>> def yf_generator():
...     a = [1, 2, 3]
...     yield from a
... 
>>> gen = yf_generator()
>>> list(gen)
[1, 2, 3]

ํ•˜์ง€๋งŒ ์œ„์™€ ๊ฐ™์ด yield from ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ˜๋ณต๋ฌธ ์—†์ด iterableํ•œ ๊ฐ์ฒด๋ฅผ yieldํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 


 

 

3. generator์™€ yield์˜ ์‘์šฉ

generator๋Š” iterableํ•œ ๊ฐ์ฒด๋กœ ๋™์‹œ์— ๋‘ ๊ฐœ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ์„œ ๋™์ž‘ํ•œ๋‹ค.

>>> def generator_ex():
...     yield 1
...     yield 2
...     yield 3
...
>>> a = generator_ex()
>>> b = generator_ex()
>>> a == b
False
>>> a is b
False
>>> next(a)
1
>>> next(b)
1
>>> next(a)
2
>>> next(b)
2
>>> next(b)
3
>>> next(a)
3

 

Python์˜ ์ž๋ฃŒํ˜•์ธ List, Set, Dictionary์˜ ํ‘œํ˜„์‹ ๋‚ด๋ถ€๋ฅผ ์‚ดํŽด๋ณด๋ฉด, generator์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

>>> type(x*x for x in [2, 4, 6])
<class 'generator'>

 

generator๋กœ ๊ตฌํ˜„ํ•œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๋กœ ์ถœ๋ ฅํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

>>> print(return_abc())  # return list("ABC")
['A', 'B', 'C']
>>> print(yield_abc())  # yield "A"; yield "B"; yield "C"
<generator object yield_abc at 0x7f4ed03e6040>
  • return_abc() : ๋ฆฌ์ŠคํŠธ(list)๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • yield_abc() : ์ œ๋„ˆ๋ ˆ์ดํ„ฐ(generator)๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

โ–ถ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

๊ฐ„๋‹จํžˆ yield ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ 1,2,3,4,5๋ผ๋Š” ์ˆซ์ž๋ฅผ ๋ฌดํ•œํžˆ ์ƒ์„ฑํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

def yield_loop():
    while True:
        yield 1
        yield 2
        yield 3
        yield 4
        yield 5
        
for f in yield_loop():
    print(f)

time ๋ชจ๋“ˆ์„ ์ด์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ๋Œ€๊ธฐํ•˜๊ฑฐ๋‚˜, ๋ฐ˜๋ณต๋ฌธ์„ ๋น ์ ธ๋‚˜์˜ค๋Š” ์กฐ๊ฑด์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋žจ์€ ๋ฌดํ•œํžˆ ๋ฐ˜๋ณต๋œ๋‹ค.

1
2
3
4
5
1
2
3
4
...(์ค‘๋žต)

๋งŒ์•ฝ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌดํ•œํžˆ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ (์ปดํ“จํ„ฐ์˜ ๋ฌผ๋ฆฌ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—) ์‹œ์Šคํ…œ์— ํฐ ๋ถ€ํ•˜๋ฅผ ๋‚จ๊ธธ ๊ฒƒ์ด๋‹ค. 

728x90
320x100
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ’ป Language > Python : ํŒŒ์ด์ฌ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Python] ์ฝ”๋“œ์—…(CodeUp) ๋ฌธ์ œ์ง‘ ๊ธฐ์ดˆ 100์ œ [๊ธฐ์ดˆ-๋น„ํŠธ์‹œํ”„ํŠธ์—ฐ์‚ฐ, ๊ธฐ์ดˆ-๋น„๊ต์—ฐ์‚ฐ, ๊ธฐ์ดˆ-๋…ผ๋ฆฌ์—ฐ์‚ฐ, ๊ธฐ์ดˆ-๋น„ํŠธ๋‹จ์œ„๋…ผ๋ฆฌ์—ฐ์‚ฐ, ๊ธฐ์ดˆ-3ํ•ญ์—ฐ์‚ฐ] 6046~6064  (0) 2024.08.28
[Python] ์ฝ”๋“œ์—…(CodeUp) ๋ฌธ์ œ์ง‘ ๊ธฐ์ดˆ 100์ œ [๊ธฐ์ดˆ-์ข…ํ•ฉ] 6077~6091  (0) 2024.08.27
[Python] ์ฝ”๋“œ์—…(CodeUp) ๋ฌธ์ œ์ง‘ ๊ธฐ์ดˆ 100์ œ [๊ธฐ์ดˆ-๊ฐ’๋ณ€ํ™˜, ๊ธฐ์ดˆ-์ถœ๋ ฅ๋ณ€ํ™˜, ๊ธฐ์ดˆ-์‚ฐ์ˆ ์—ฐ์‚ฐ] 6025~6045  (0) 2024.08.27
[Python] ์ฝ”๋“œ์—…(CodeUp) ๋ฌธ์ œ์ง‘ ๊ธฐ์ดˆ 100์ œ [๊ธฐ์ดˆ-์ถœ๋ ฅ] 6009~6024  (0) 2024.08.27
[Python] ์ฝ”๋“œ์—…(CodeUp) ๋ฌธ์ œ์ง‘ ๊ธฐ์ดˆ 100์ œ [๊ธฐ์ดˆ-์ถœ๋ ฅ] 6001~6008  (0) 2024.08.27
'๐Ÿ’ป Language/Python : ํŒŒ์ด์ฌ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Python] ์ฝ”๋“œ์—…(CodeUp) ๋ฌธ์ œ์ง‘ ๊ธฐ์ดˆ 100์ œ [๊ธฐ์ดˆ-์ข…ํ•ฉ] 6077~6091
  • [Python] ์ฝ”๋“œ์—…(CodeUp) ๋ฌธ์ œ์ง‘ ๊ธฐ์ดˆ 100์ œ [๊ธฐ์ดˆ-๊ฐ’๋ณ€ํ™˜, ๊ธฐ์ดˆ-์ถœ๋ ฅ๋ณ€ํ™˜, ๊ธฐ์ดˆ-์‚ฐ์ˆ ์—ฐ์‚ฐ] 6025~6045
  • [Python] ์ฝ”๋“œ์—…(CodeUp) ๋ฌธ์ œ์ง‘ ๊ธฐ์ดˆ 100์ œ [๊ธฐ์ดˆ-์ถœ๋ ฅ] 6009~6024
  • [Python] ์ฝ”๋“œ์—…(CodeUp) ๋ฌธ์ œ์ง‘ ๊ธฐ์ดˆ 100์ œ [๊ธฐ์ดˆ-์ถœ๋ ฅ] 6001~6008
mxnxeonx
mxnxeonx
"์•„, ์ด๊ฑฐ ๋ญ์˜€๋”๋ผ"๋ฅผ ํ•˜์ง€ ์•Š๊ธฐ์œ„ํ•œ ์ผ๊ธฐ์žฅ.
  • mxnxeonx
    MJ's Development Diary
    mxnxeonx
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (154)
      • ๐Ÿ’ป Language (43)
        • Java : ์ž๋ฐ” (18)
        • Python : ํŒŒ์ด์ฌ (9)
        • ROS : ๋กœ๋ด‡์‹œ์Šคํ…œ (9)
        • Android : ์•ˆ๋“œ๋กœ์ด๋“œ (4)
        • JavaScript : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ (2)
      • ๐ŸŒ Environment (19)
        • IDE : ํ†ตํ•ฉ๊ฐœ๋ฐœํ™˜๊ฒฝ (9)
        • Virtual : ๊ฐ€์ƒํ™˜๊ฒฝ (10)
      • โš™ Framework (12)
        • Vue-๋ทฐ (3)
        • Spring-์Šคํ”„๋ง (7)
      • ๐Ÿ’พ DataBase (18)
      • ๐ŸŒŒ OS (36)
        • Linux-๋ฆฌ๋ˆ…์Šค (36)
      • ๐Ÿ’ฌ CI · CD (7)
        • Git : ๊นƒ (7)
      • ๐Ÿ“ƒ ETC (3)
      • ๐Ÿค– AI (4)
  • ๋งํฌ

    • GitHub
  • ์ธ๊ธฐ ๊ธ€

  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
mxnxeonx
[Python] ์ƒ์„ฑ๊ธฐ(generator)์™€ yield์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”