๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ต์œก/์ŠคํŒŒ๋ฅดํƒ€

[TIL] ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ AI 9๊ธฐ - 3ํšŒ

by gomdeng 2024. 11. 27.

๐Ÿถ ํ•™์Šต ๋ฒ”์œ„

  • ๊ฐ•์ขŒ: ์ธ๊ณต์ง€๋Šฅ์„ ์œ„ํ•œ ํŒŒ์ด์ฌ (3์ฃผ์ฐจ ~ 4์ฃผ์ฐจ)
    • 4.* ํŒŒ์ผ๋‹ค๋ฃจ๊ธฐ, ์ด๋„ˆ๋ ˆ์ดํ„ฐ, ์ œ๋„ˆ๋ ˆ์ดํ„ฐ, ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ
  • ์ฝ”๋”ฉ์‚ฌ์ดํŠธ ๋ฌธ์ œ ํ’€์ด (ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค)
  • ๋น„์ „๊ณต์ž๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” AI ์ง€์‹ 1์ฑ•ํ„ฐ

 

๐Ÿถ ๊ณต๋ถ€๋‚ด์šฉ

โœจ ํŒŒ์ผ

๐Ÿšฉ ์š”์•ฝ
 - ํŒŒ์ผ ์—ด๊ธฐ/๋‹ซ๊ธฐ, ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋“ฑ..
    
๐Ÿšฉ ๋‚ด์šฉ
1. ํŒŒ์ผ ์—ด๊ธฐ
 - open()
 - ํŒŒ์ผ ์ด๋ฆ„๊ณผ ๋ชจ๋“œ๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Œ # ex. f = open("sparta.txt", "r")
 - ๋ชจ๋“œ
  > r: ์ฝ๊ธฐ ๋ชจ๋“œ (๊ธฐ๋ณธ๊ฐ’)
  > w: ์“ฐ๊ธฐ ๋ชจ๋“œ (ํŒŒ์ผ์ด ์กด์žฌํ•˜๋ฉด ๋‚ด์šฉ์„ ๋ฎ์–ด์“ฐ๊ณ , ํŒŒ์ผ์ด ์—†์œผ๋ฉด ํŒŒ์ผ์„ ์ƒ์„ฑํ•จ)
  > a: ์ถ”๊ฐ€ ๋ชจ๋“œ (ํŒŒ์ผ์˜ ๋์— ์ƒˆ๋กœ์šด ๋‚ด์šฉ ์ถ”๊ฐ€)
  > b: ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ชจ๋“œ (์ด์ง„ ํŒŒ์ผ์„ ์ฝ๊ฑฐ๋‚˜ ์“ธ ๋•Œ ์‚ฌ์šฉ)
 
 - read()
  > ํŒŒ์ผ ๊ฐ์ฒด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ๋ฐ ์‚ฌ์šฉ
  > ์ธ์ž๊ฐ’์ด ์กด์žฌํ•  ๊ฒฝ์šฐ : ํŒŒ์ผ์—์„œ ์ง€์ •๋œ ์ˆ˜์˜ ๋ฐ”์ดํŠธ๋ฅผ ์ฝ์–ด ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜
  > ์ธ์ž๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ : ํŒŒ์ผ์˜ ์ „์ฒด ๋‚ด์šฉ์„ ์ฝ์–ด ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜

2. ํŒŒ์ผ ์“ฐ๊ธฐ (w: ๊ธฐ์กด ๋‚ด์šฉ ์‚ญ์ œ => ๋ฎ์–ด์“ฐ๊ธฐ, a: ๊ธฐ์กด ๋‚ด์šฉ ์œ ์ง€ => ์ƒˆ๋กœ์šด ๋‚ด์šฉ ์ถ”๊ฐ€)
 - write()
  > ๋ฌธ์ž์—ด์„ ์ธ์ž๋กœ ๋ฐ›๊ณ , ์‹ค์ œ๋กœ ํŒŒ์ผ์— ์“ฐ์ธ ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
  > ํŒŒ์ผ ์—ด๊ธฐ ๋ชจ๋“œ์™€ ํŒŒ์ผ์˜ ์ธ์ฝ”๋”ฉ์„ ์ ์ ˆํžˆ ์„ค์ • ํ•„์š”
   # with open('example.txt', 'w', encoding='utf-8') as file:
 
 - writelines()
  > ๋ฌธ์ž์—ด์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ธ์ž๋กœ ๋ฐ›๊ณ , ๋‹จ์ˆœํžˆ ํŒŒ์ผ์— ๋ฌธ์ž์—ด์„ ์”€ (๋ฌธ์ž์˜ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜ ์•ˆํ•จ)
 
 - seek()
  > ํŒŒ์ผ ๋‚ด์—์„œ ์ปค์„œ์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ
  > ํŒŒ์ผ์˜ ํŠน์ • ์œ„์น˜๋กœ ์ปค์„œ๋ฅผ ์ด๋™์‹œ์ผœ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ๋‚˜ ์“ฐ๊ธฐ๋ฅผ ์‹œ์ž‘
  > ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ๋‚˜ ํŒŒ์ผ์˜ ํŠน์ • ๋ถ€๋ถ„๋งŒ์„ ์ฝ๊ณ  ์‹ถ์„ ๋•Œ ๋งค์šฐ ํŽธ๋ฆฌ

3. ํŒŒ์ผ ๋‹ซ๊ธฐ
 - with ๋ฌธ
  > ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ ์ ˆํ•œ ๊ด€๋ฆฌ๋ฅผ ๋ณด์žฅํ•˜๋Š” ์ปจํ…์ŠคํŠธ ๋งค๋‹ˆ์ €๋กœ ์‚ฌ์šฉ
  > ํŒŒ์ผ ์ž‘์—…, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ, ์„ธ์…˜ ๊ด€๋ฆฌ ๋“ฑ ์ž์›์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
  > ํŒŒ์ผ์ด๋‚˜ ์„ธ์…˜ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค์˜ ๊ฐœ๋ฐฉ๊ณผ ํ์‡„๋ฅผ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ
  > ๋ฆฌ์†Œ์Šค ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๋” ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€
 
 - close()
  > ํŒŒ์ผ์ด๋‚˜ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ๊ณผ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ซ์•„์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ
  > with ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜์ง€ ์•Š์•„๋„ ๋จ (with ๋ฌธ์ด ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ)
  
๐Ÿšฉ ์‚ฌ์šฉ๋ฒ•
1. ํŒŒ์ผ ์—ด๊ธฐ (์ฝ๊ธฐ: r)
    with open('sparta.txt', 'r') as file:
        content = file.read()
        print(content)

    # ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ค„ ๋‹จ์œ„๋กœ ์ฝ๊ธฐ : readline() or readlines()
    with open('sparta.txt', 'r') as file:
        lines = file.readlines()
        for line in lines:
            print(line.strip())  # strip() ์œผ๋กœ ์ค„๋ฐ”๊ฟˆ ๋ฌธ์ž ์ œ๊ฑฐ
            
2. ํŒŒ์ผ ์“ฐ๊ธฐ (w or a)
    # write()
    with open('sparta.txt', 'w') as file:
        file.write("Hello, Sparta!")
        
    # writelines() : ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ ๋ฌธ์ž์—ด์„ ํŒŒ์ผ์— ์“ฐ๊ธฐ
    lines = ["Hello, World!\n", "Welcome to Python.\n", "Enjoy coding!"]

    with open('example.txt', 'w') as file:
        file.writelines(lines)
                   
3. ํŒŒ์ผ ๋‹ซ๊ธฐ
    file = open('sparta.txt', 'r')
    content = file.read()
    print(content)
    file.close()
    
    # ํŒŒ์ผ close ์—ฌ๋ถ€ ํ™•์ธ
    print(file.closed)  # True๊ฐ€ ์ถœ๋ ฅ๋˜๋ฉด ์ •์ƒ close

 

โœจ ์ด๋„ˆ๋ ˆ์ดํ„ฐ ( iterator)

๐Ÿšฉ ๋‚ด์šฉ
1. ๋ฐ์ดํ„ฐ์˜ ์›์†Œ๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด
2. ์ด๋„ˆ๋ ˆ์ดํ„ฐ๋Š” __iter__() ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„
3. __next__() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ๋‹ค์Œ ์›์†Œ๋ฅผ ๋ฐ˜ํ™˜
4. ๋ฐ์ดํ„ฐ๊ฐ€ ๋” ์ด์ƒ ์—†์„ ๋•Œ๋Š” StopIteration ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ
5. ํŒŒ์ด์ฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋Š” ์ค‘์š”ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜
โ€ป ๋ฆฌ์ŠคํŠธ๋‚˜ ํŠœํ”Œ๊ณผ ๊ฐ™์€ ์ปฌ๋ ‰์…˜์€ ์ด๋„ˆ๋ ˆ์ดํ„ฐ๋ฅผ ์ง€์›

๐Ÿšฉ ์‚ฌ์šฉ๋ฒ•
1. ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ์ด๋„ˆ๋ ˆ์ดํ„ฐ ํ™œ์šฉ
    my_list = [1, 2, 3]
    iterator = iter(my_list)  # ์ด๋„ˆ๋ ˆ์ดํ„ฐ ์ƒ์„ฑ

    print(next(iterator))  # 1
    print(next(iterator))  # 2
    print(next(iterator))  # 3

    # ๋‹ค์Œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด StopIteration ์˜ˆ์™ธ ๋ฐœ์ƒ
    try:
        print(next(iterator))
    except StopIteration:
        print("๋‹ค์Œ ์šฉ์‚ฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.")
        
2. ์‚ฌ์šฉ์ž ํด๋ž˜์Šค์—์„œ ์ด๋„ˆ๋ ˆ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๊ตฌํ˜„
    class CountDown:
        def __init__(self, start):
            self.current = start

        def __iter__(self):
            return self  # ์ด๋„ˆ๋ ˆ์ดํ„ฐ ์ธ์Šคํ„ด์Šค ๋ฐ˜ํ™˜

        def __next__(self):
            if self.current > 0:
                num = self.current
                self.current -= 1
                return num
            raise StopIteration  # ๋” ์ด์ƒ ๋ฐ˜ํ™˜ํ•  ์ˆซ์ž๊ฐ€ ์—†์„ ๋•Œ ์˜ˆ์™ธ ๋ฐœ์ƒ

    # ์‚ฌ์šฉ ์˜ˆ
    countdown = CountDown(3)
    for number in countdown:
        print(number)  # 3, 2, 1

 

โœจ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ( generator )

๐Ÿšฉ ๋‚ด์šฉ
1. ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•
2. ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜์ง€ ์•Š์Œ => ๊ฐ’์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑ
3. ์ผ๋ฐ˜ ํ•จ์ˆ˜์™€ ๋น„์Šทํ•˜์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ return ๋Œ€์‹  yield ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉ
4. ๋А๋ฆฐ ๊ณ„์‚ฐ (๊ณ„์‚ฐ ์ง€์—ฐ)
 - yield๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜์˜ ์ƒํƒœ๊ฐ€ ๊ทธ ์œ„์น˜์—์„œ ์ผ์‹œ ์ค‘์ง€ 
 - ๋‹ค์Œ ๊ฐ’์ด ์š”์ฒญ๋  ๋•Œ๊นŒ์ง€ ํ•จ์ˆ˜์˜ ์‹คํ–‰ ์ƒํƒœ๊ฐ€ ๋ณด์กด
 - ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ์ƒ์„ฑ => ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ๊ฐ์†Œ
5. ํŒŒ์ด์ฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋Š” ์ค‘์š”ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜
โ€ป ๋ฆฌ์ŠคํŠธ๋‚˜ ํŠœํ”Œ๊ณผ ๊ฐ™์€ ์ปฌ๋ ‰์…˜์€ ์ด๋„ˆ๋ ˆ์ดํ„ฐ๋ฅผ ์ง€์›

๐Ÿšฉ ์‚ฌ์šฉ๋ฒ•
    def count_down(start):
        n = start
        while n > 0:
            yield n
            n -= 1

    # ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ์‚ฌ์šฉ
    for number in count_down(3):
        print(number)  # 3, 2, 1 ์ถœ๋ ฅ

 

โœจ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ( decorator  )

๐Ÿšฉ ๋‚ด์šฉ
1. ํ•จ์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ์˜ ๋™์ž‘์„ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜
2. ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํŠน์ • ๊ธฐ๋Šฅ์„ ํ™•์žฅ/์ˆ˜์ • => ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ/๊ฐ€๋…์„ฑ ํ–ฅ์ƒ
3. ๋‚ด๋ถ€์—์„œ๋Š” ์ธ์ž๋กœ ๋ฐ›์€ ํ•จ์ˆ˜๋ฅผ ๊ฐ์‹ธ๋Š” (wrapper)์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ์ •์˜
4. ๊ฐ์‹ธ์ง„ ํ•จ์ˆ˜๋Š” ์›๋ณธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ถ”๊ฐ€์ ์ธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰
5. ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ ๋กœ๊น…ํ•  ๋•Œ ์œ ์šฉ (ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ๋กœ๊ทธ ๊ธฐ๋ก)
6. ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ์ œ์–ด ๊ฐ€๋Šฅ => ex. ํŠน์ • ์‚ฌ์šฉ์ž๊ฐ€ ์‹คํ–‰ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธ
7. ํ•จ์ˆ˜์˜ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜์—ฌ ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ํ™œ์šฉ

๐Ÿšฉ ์‚ฌ์šฉ๋ฒ•
    # 1. say_hello() => decorator ๊ตฌํ˜„ (=my_decorator())
    # 2. say_hello() ํ˜ธ์ถœ => wrapper()๊ฐ€ ์‹คํ–‰ (๊ทธ ๋‚ด๋ถ€์—์„œ say_hello() ์‹คํ–‰)
    
    def my_decorator(func):
        def wrapper():
            print("Something is happening before the function is called.")
            func()
            print("Something is happening after the function is called.")
        return wrapper

    @my_decorator
    def say_hello():
        print("Sparta!")

    say_hello()
    
    ----------------------------------------------------------------------
    # ์ธ์ž๋ฅผ ๋ฐ›๋Š” ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ
    # ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์ž์ฒด์— ์ธ์ž๋ฅผ ์ „๋‹ฌ
    # - ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ ์ƒ์„ฑ
    # - ์ด๋Ÿฌํ•œ ํ˜•ํƒœ์˜ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ "๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒฉํ† ๋ฆฌ" ๋ผ๊ณ  ๋ถ€๋ฆ„
    
    # 1. ์ธ์ž๋ฅผ ๋ฐ›๋Š” ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์ƒ์„ฑ (repeat)
    # 2. greet() ํ•จ์ˆ˜๊ฐ€ 3๋ฒˆ ํ˜ธ์ถœ๋˜๋„๋ก ๊ตฌํ˜„
    
    def repeat(num_times):
        def decorator_repeat(func):
            def wrapper(*args, **kwargs):
                for _ in range(num_times):
                    result = func(*args, **kwargs)
                return result
            return wrapper
    	return decorator_repeat

    @repeat(num_times=3)
    def greet(name):
        print(f"Hello {name}")

    greet("Sparta")

 

 

๐Ÿถ ๋А๋‚€์ 

1. ๋น„์ „๊ณต์ž๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” AI ์ง€์‹ ๋‚ด์šฉ์ด ์ƒ๊ฐ๋ณด๋‹ค ํฅ๋ฏธ์ง„์ง„ํ•˜๋‹ค.
2. ๊ฐœ์ธ์ ์œผ๋กœ ์ฝ”๋”ฉ ๋ฌธ์ œ ํ’€๋ฉด์„œ, ์ •๋ฆฌํ•˜๋Š” ๊ฒƒ๋“ค์ด ์‹ค์ œ ๊ฐ•์˜์— ๊ฝค ๋„์›€์ด ๋งŽ์ด ๋˜์—ˆ๋‹ค.
3. 12์‹œ๊ฐ„ ๊ฝค๋‚˜ ๋ˆˆ์•Œ์ด๋ž‘ ๋จธ๋ฆฌ ์•„ํ”„๋‹ค..