728x90
반응형
SMALL

목차:

  • 데코레이터(Decorator) 란?
  • 데코레이터 만들기
  • 어노테이션 사용방법

 

1. 데코레이터(Decorator) 란?

* 함수를 꾸며주는 함수
* 함수를 인수로 받는 클로저
* @(어노테이션)을 이용하여 사용
* 반복되는 작업을 여러 함수에 적용할 경우, 기존 함수를 수정하지 않고 추가 기능을 구현하고 싶은 경우
 

2. 데코레이터(Decorator) 만들기

 

 

3. @ 어노테이션 사용하기

 

 

728x90
반응형
LIST

'파이썬' 카테고리의 다른 글

폴더 관리(이동, 복사, 정렬)  (0) 2023.03.14
파일 입출력 라이브러리  (0) 2023.03.14
클로저(Closure)  (0) 2023.03.13
인코딩과 디코딩  (0) 2023.03.13
파일 열기  (0) 2023.03.13
728x90
반응형
SMALL

목차:

  • 1. 클로저(Closure)란?
  • 2. 클래스를 활용한 곱셈 함수 만들기
  • 3. call 스페셜 메소드를 활용한 곱셈 함수 만들기
  • 4. 클로저를 활용한 곱셈 함수 만들기
  • 5.  결론

 

1. 클로저(Closure)란?

  • 함수 안의 함수를 결과로 반환할 때, 그 내부 함수를 클로저라고 함.
  • 외부 함수의 변수를 내부 함수에서 사용할 수 있음.
  • 콜백함수, 함수의 순차적 실행, 데코레이터 함수 등에 사용됨.

 

2. 클래스를 활용한 곱셈 함수 만들기

  • 객체 지향 프로그래밍에서 클래스를 활용하여 곱셈 함수 만들기.
  • Mul 클래스의 mul 메소드를 호출하여 사용.

 

3. call 스페셜 메소드를 활용한 곱셈 함수 만들기

  • Mul 클래스에 call 스페셜 메소드를 정의하여 객체를 실행할 때 호출되도록 만들기.
  • 객체를 함수처럼 사용할 수 있음.

 

 

4. 클로저를 활용한 곱셈 함수 만들기

  • 외부 함수와 내부 함수를 활용하여 클로저를 구현.
  • 외부 함수에서 내부 함수를 반환하고, 내부 함수에서는 외부 함수의 변수를 사용하여 계산.
  • mul 함수를 호출하여 내부 함수를 반환받아 사용함.

 

 

5.  결론

  • 클로저는 함수형 프로그래밍에서 매우 중요한 개념 중 하나이며 파이썬에서도 활용도가 높은 개념 중 하나임.
  • 다양한 방법으로 클로저를 구현하고 활용할 수 있으며, 이를 활용하여 더욱 효율적인 코드를 작성할 수 있음.
728x90
반응형
LIST

'파이썬' 카테고리의 다른 글

파일 입출력 라이브러리  (0) 2023.03.14
데코레이터(Decorator) - 함수 꾸며주기  (0) 2023.03.13
인코딩과 디코딩  (0) 2023.03.13
파일 열기  (0) 2023.03.13
예외 처리  (0) 2023.03.13
728x90
반응형
SMALL

인코딩과 디코딩

 

1. 인코딩(Encoding)

  • 컴퓨터에서 사람이 인지할 수 있는 형태의 데이터를 약속된 규칙에 의해 컴퓨터가 사용하는 0과 1로 변환하는 과정
  • 인코딩 = 코드화 = 암호화 = 부호화
  • ex) 아스키코드 인코딩, URL 인코딩, Base64 인코딩, 유니코드 인코딩..
  • https://home.unicode.org/

데이터를 주고받을때 시스템마다 지원하는 것이 달라서 보통 바이트는 다들 지원이 가능하기때문에 데이터를 전송 받아놓고 나중에 다시 복원을 하던 할수 있게 인코딩을 해놓는다.

 

 

txt1 = 'Hello Python'
type(txt1)
 
str
 

 

txt2 = txt1.encode('utf-8')
type(txt2)
 
bytes

 

print(txt2)
 
b'Hello Python'
 

 

txt3 = '안녕하세요 파이썬'
print(txt3.encode('utf-8'))
 
b'\xec\x95\x88\xeb\x85\x95\xed\x95\x98\xec\x84\xb8\xec\x9a\x94 \xed\x8c\x8c\xec\x9d\xb4\xec\x8d\xac'

2. 디코딩(Decoding)

 

 

 
 
b'\xec\x95\x88\xeb\x85\x95\xed\x95\x98\xec\x84\xb8\xec\x9a\x94 \xed\x8c\x8c\xec\x9d\xb4\xec\x8d\xac'
 

 

 
 
안녕하세요 파이썬
 

 

 
 
 
728x90
반응형
LIST

'파이썬' 카테고리의 다른 글

데코레이터(Decorator) - 함수 꾸며주기  (0) 2023.03.13
클로저(Closure)  (0) 2023.03.13
파일 열기  (0) 2023.03.13
예외 처리  (0) 2023.03.13
Special Method  (0) 2023.03.10
728x90
반응형
SMALL

1. 파일 열기

  • 파일열기 모드: w(출력), r(입력), a(추가출력,기존에 파일이 있을때 내용을 추가)
  • w는 지정된 경로에 파일이 없으면 파일을 생성후 저장하고, 파일이 있으면 기존의 모든 데이터를 지우고 다시 저장 (한글의 삽입모드)
  • r은 지정된 경로에 파일이 없으면 에러, 있으면 해당파일의 데이터를 읽어옴
  • a는 지정된 경로에 파일이 없으면 만든후에 저장, 있으면 기존의 데이터 뒤에 이어서 저장 (한글의 입력모드)
  • 파일 종류 모드: t(텍스트 파일, 생략 가능), b(바이너리 파일, # 바이너리 = 텍스트 이외의 모든파일)

파일을 출력할때 작업이 모두 완료되면 반드시 close() 메소드를 사용해서 파일을 닫아야 정상적으로 데이터가 저장됌

 

1-1. 파일 저장하기


file = open('data.txt', 'wt')
for i in range(10):
    file.write('파일 열기 테스트: ' + str(i) + '\n') # \n: 파일 내에서 개행(엔터키역할)

file.close()
print('data.txt 파일에 쓰기 완료!')
 
data.txt 파일에 쓰기 완료!
 

1-2. 파일 경로

  • 절대 경로: 디스크 드라이브의 최상위(root) 디렉토리부터 파일이 저장 또는 읽어올 디렉토리까지의 경로(c드라이브 부터)
  • 예) C:/eadgnus/python/Day2/data.txt
  • 상대 경로: 현재 화면에 표시되는 소스파일이 위치한 디렉토리부터 파일이 저장 또는 읽어올 디렉토리까지의 경로(현재위치부터)
    • 같은 디렉토리: 파일명 or ./파일명
    • 상위 디렉토리: ../파일명 or ./../파일명
    • 하위 디렉토리: 디렉토리명/파일명 ./디렉토리명/파일명
  • 리눅스에서는 ./ : 현재 파일위치라는뜻
 

 

file = open('./data/data.txt', 'wt')
for i in range(10):
    file.write('파일 열기 테스트: ' + str(i) + '\n')

file.close()
print('data.txt 파일에 쓰기 완료!')
 
data.txt 파일에 쓰기 완료!
 

1-3. 파일 읽어오기

  • read(): 파일로부터 전체 데이터를 읽어옴
  • read(size): 파일로부터 사이즈 만큼 데이터를 읽어옴
 

 

file = open('./data/data.txt', 'rt')
data = file.read()
print('data.txt 전체 데이터 읽기 완료!')
print(data)
file.close()
 
data.txt 전체 데이터 읽기 완료!
파일 열기 테스트: 0
파일 열기 테스트: 1
파일 열기 테스트: 2
파일 열기 테스트: 3
파일 열기 테스트: 4
파일 열기 테스트: 5
파일 열기 테스트: 6
파일 열기 테스트: 7
파일 열기 테스트: 8
파일 열기 테스트: 9

 

 

file = open('./data/data.txt', 'rt')
data = file.read(10) # 유니코드 10 글자를 읽어온다.
print('data.txt 일부 데이터 읽기 완료!')
print(data)
file.close()
 
data.txt 일부 데이터 읽기 완료!
파일 열기 테스트:
 

 

# read(10)을 이용하여 data.txt에 있는 모든 데이터를 출력하기

file = open('./data/data.txt', 'rt')

while True:
    data = file.read(10)
    
    if not data:
        break
    print(data, end="")
 
파일 열기 테스트: 0
파일 열기 테스트: 1
파일 열기 테스트: 2
파일 열기 테스트: 3
파일 열기 테스트: 4
파일 열기 테스트: 5
파일 열기 테스트: 6
파일 열기 테스트: 7
파일 열기 테스트: 8
파일 열기 테스트: 9
 

문제

키보드로 데이터를 입력하고 텍스트 파일에 저장하는 프로그램을 작성해보자(단, 'quit'이 입력되면 저장을 끝내고 프로그램을 종료)

  • 단어를 입력하세요: apple
  • 단어를 입력하세요: banana
  • 단어를 입력하세요: orange ...
  • 단어를 입력하세요: quit 저장되었습니다.
 

 

while True:
    data = input('단어를 입력하세요: ')
    if data.lower() != 'quit':
        file = open('./data/test.txt', 'at')
        file.write(data + '\n')

    else:
        file.close()
        break
 
단어를 입력하세요: QUIT
 

 

# 선생님 답안
file = open('./data/word.txt', 'w')
while True:
    data = input('단어를 입력하세요: ')
    if data.lower() == 'quit':
        break
    file.write(data + '\n')
file.close()
 
단어를 입력하세요: 바나나
단어를 입력하세요: 애플
단어를 입력하세요: 사과
단어를 입력하세요: QUIT
 

1-4. with 문

  • 자원을 획득하고 사용 후 반납해야 하는 경우 블록으로 사용하는 문장

 

with open('./data/word.txt', 'w') as f:
    while True:
        data = input('단어를 입력하세요: ')
        if data.lower() == 'quit':
            break
        f.write(data + '\n')
# file.close() 가 여기서는 필요가 없다.
 
단어를 입력하세요: 애플스토어
단어를 입력하세요: 에어팟 2
단어를 입력하세요: 에어팟 프로2
단어를 입력하세요: 감자바나나
단어를 입력하세요: 아보카도 스프
단어를 입력하세요: quit

1-5. readline()

  • 텍스트파일을 한 줄씩 읽어서 처리
  • 파일이 종료되어 더이상 읽을 수 없으면 빈 문자열 ' ' 을 읽어옴
 

 

with open('./data/word.txt', 'r') as f:
    lines = []
    while True:
        line = f.readline()
        if not line:
            break
        if len(line.strip()) != 0:
            print(line, end="")
            lines.append(line.strip())
print(lines)

 
애플스토어
에어팟 2
에어팟 프로2
감자바나나
아보카도 스프
['애플스토어', '에어팟 2', '에어팟 프로2', '감자바나나', '아보카도 스프']
 

1-6. readlines()

  • 전체라인을 모두 읽어서 각 라인단위로 리스트에 raw string으로 저장

 

 
 
['애플스토어\n', '에어팟 2\n', '에어팟 프로2\n', '감자바나나\n', '아보카도 스프\n']
 

 

 
 
애플스토어
에어팟 2
에어팟 프로2
감자바나나
아보카도 스프
728x90
반응형
LIST

'파이썬' 카테고리의 다른 글

클로저(Closure)  (0) 2023.03.13
인코딩과 디코딩  (0) 2023.03.13
예외 처리  (0) 2023.03.13
Special Method  (0) 2023.03.10
클래스의 상속  (0) 2023.03.10
728x90
반응형
SMALL

예외 처리란 오류가 발생되었을 때 별도의 처리를 하거나 무시하고 프로그램을 실행하는 것을 의미합니다.

파이썬은 발생할 수 있는 모든 문제를 예외 클래스로 만들어 놓았습니다.

 

  1. 예외 처리란?
  • 프로그램 실행 중 예상치 못한 오류가 발생했을 때 별도의 처리를 하거나 무시하는 것입니다.
  • try-except 블록으로 예외 처리를 할 수 있습니다.
  1. try-except 블록
  • try 블록에 예상되는 오류가 발생할 것으로 예상되는 코드를 코딩합니다.
  • try 블록에 코딩된 코드를 실행하다가 오류가 발생하면, 해당 오류에 대한 except 블록으로 제어가 이동됩니다.
  • except 블록에 코딩된 코드가 실행되고, 이후에 프로그램이 종료됩니다.
  1. 예외 처리 방법
  • 특정 예외 처리: except 뒤에 처리할 예외 클래스를 명시합니다.
  • 여러 예외 처리: 각 예외 처리 사이에 쉼표를 사용하여 여러 개의 예외 클래스를 명시합니다.
  • 예외 에러 메시지 받기: except 블록에서 예외 클래스 이름 뒤에 as 변수명을 추가하여 예외에 대한 정보를 변수에 저장할 수 있습니다.

try-except 사용하기

오류가 발생될 것으로 예상되는 문장을 try 블록에 코딩하고, try 블록에 코딩된 내용을 실행하다가 오류가 발생하면 더 이상 try 블록의 내용을 실행하지 않고 해당 오류의 except 블록에 코딩된 내용을 실행합니다.

 

특정 예외만 처리하기

except 구문에 예외 클래스 이름을 지정해주면 해당 예외에 대해서만 예외 처리를 할 수 있습니다.

 

 

여러 가지 예외 처리하기

여러 가지 예외를 처리하기 위해서는 except 구문을 여러 번 사용하면 됩니다.

 

예외 에러 메시지 받기

예외 발생 시 발생한 예외에 대한 메시지를 받을 수 있습니다. except 뒤에 예외 클래스 이름과 함께 변수를 지정하면 해당 변수에 예외 메시지가 저장됩니다.

 

 

2. 예외 발생시키기

 

 

try:
    n = int(input('짝수를 입력하세요: '))
    if n % 2 != 0:
        raise Exception('짝수가 아닙니다') # 예외를 발생시킴
    print(n)
except Exception as e:
    print('예외가 발생 했습니다.', e)
 
짝수를 입력하세요: 1
예외가 발생 했습니다. 짝수가 아닙니다

 

def func1():
    n = int(input('짝수를 입력하세요: '))
    if n % 2 != 0:
        raise Exception('짝수가 아닙니다')
    print(n)

try:
    func1()
except Exception as e:
    print('예외가 발생했습니다.', e)
 
짝수를 입력하세요: 7
예외가 발생했습니다. 짝수가 아닙니다

 

def func1():
    n = int(input('짝수를 입력하세요: '))
    if n % 2 != 0:
        raise Exception('짝수가 아닙니다')
    print(n)

func1()
print('오류가나면 이글이 안뜸')
 
 

 
 
def func1(): # 콜백함수 중간에 오류처리를 해줘도 가능
    try:
        func2()
    except TypeError:
        print('타입이 올바르지 않습니다!')

def func2():
    func3()

def func3():
    print('%d' % '문자열 출력')

func1()
 
타입이 올바르지 않습니다!
 

 

 
타입이 올바르지 않습니다!

 

728x90
반응형
LIST

'파이썬' 카테고리의 다른 글

인코딩과 디코딩  (0) 2023.03.13
파일 열기  (0) 2023.03.13
Special Method  (0) 2023.03.10
클래스의 상속  (0) 2023.03.10
파이썬 클래스(Class)의 메소드(Method) 정리  (0) 2023.03.10
728x90
반응형
SMALL

목차:

  1. 스페셜 메소드란?
  2. 스페셜 메소드 사용 방법
  3. 예제 코드와 함께 알아보기

 

스페셜 메소드란?

파이썬에서는 __로 시작해서 __로 끝나는 특수한 메소드를 스페셜 메소드라고 부릅니다. 이 메소드들은 파이썬 내장 함수나 연산자와 함께 사용됩니다. 스페셜 메소드를 재구현하면 객체에 여러 가지 파이썬 내장 함수나 연산자에 원하는 기능을 부여할 수 있습니다.

 

스페셜 메소드 사용 방법과 장점

스페셜 메소드는 클래스에서만 사용 가능합니다. 클래스에서 스페셜 메소드를 오버라이딩하면, 파이썬의 내장 함수나 연산자에 사용자가 원하는 기능을 부여할 수 있습니다. 이렇게 하면 코드의 가독성을 높일 수 있으며, 객체 지향 프로그래밍의 특징인 다형성을 구현할 수 있습니다.

 

 

예제 코드

 

 


 
(3, 4)
 
 
p1.print_point()
 
(3, 4)
 
 
print(p1) # str()생략
 

 

(3, 4)
 
 

 

# str() 주소를 찾아주는 함수 Object class 함수임
print(str(p1))
 
(3, 4)
 
 
num1 = 10
num2 = 20
print(num1 + num2)
 
30
 

 

print(str(p1))
 
(3, 4)
 
 

 

p2 = Point(5, 8)
 
 

 

p1 + p2
 
<__main__.Point at 0x7f2408ef0af0>
 

 

 

 
(8, 12)
 

[ ]
 
(3, 4) (5, 8)
(-2, -4)
 

[ ]
2
 

[ ]
 
3 4 -1
728x90
반응형
LIST

'파이썬' 카테고리의 다른 글

파일 열기  (0) 2023.03.13
예외 처리  (0) 2023.03.13
클래스의 상속  (0) 2023.03.10
파이썬 클래스(Class)의 메소드(Method) 정리  (0) 2023.03.10
객체 지향과 클래스  (0) 2023.03.10

+ Recent posts