개발 & 데이터베이스/파이썬

[파이썬] 기초 문법 #4 함수와 클래스

K.두부 2022. 1. 9. 22:43
반응형

함수

파이썬 함수는 예약어 def를 사용하여 정의하고 괄호() 안에 매개변수를 입력합니다. 클론(:)을 끝부분에 입력해주고 들여 쓰기로 시작되는 코드 블록이 함수의 연산에 해당하는 부분입니다.

 

1. 사용자 정의 함수

def test(a, b):
    temp = a % b
    return temp

print(test(5, 3)) # 2

modulo = test(5, 3)  # 함수가 반환하는 출력값을 변수에 저장도 가능하다.
print(modulo)  # 2

(a, b)와 같은 형태로 2개의 숫자를 원소로 갖는 투플을 사용하면 test 함수의 매개변수인 a, b에 입력값으로 전달이 가능합니다.

def test(a, b):
    temp = a % b
    return temp

tuple = [(5, 3), (2, 2), (10,4)]  # 투플 생성
for a,b in tuple:
    tuple = test(a, b)
    print(tuple)

함수를 사용할 때 주의할 점은 지역변수와 전역변수 정의입니다. 지역변수함수 내에만 존재하는 변수이므로 함수 밖에서는 사용이 불가능하고, 전역변수파이썬 파일의 어느 부분에서도 사용할 수 있습니다. 

def cal_modulo(a, b):
    temp = a % b
    return temp

num_pairs = [(5, 3), (2, 2), (10,3)]
for a, b in num_pairs:
    modulo = cal_modulo(a,b)
    print(modulo)

def cal_pairs_modulo(num_pair_list):
    result = {}
    for a, b in num_pairs:
        modulo = a % b
        result[(a,b)] = modulo
    return result

mod_pairs = cal_pairs_modulo(num_pairs)
print(mod_pairs)

print(result)

cal_pairs_modulo 함수 내에 정의된 지역변수 result 변수를 함수 밖으로 호출했기 때문에 아래와 같은 에러 메세지를 확인할 수 있습니다.

2. 람다 함수

def add_num(num):
    return num + 1

add_list = []
for x in [1,2,3]:
    y = add_num(x)
    add_list.append(y)

print(add_list)  # [2, 3, 4]

람다 함수는 어떠한 함수를 값(x) : 출력값(y)의 형태로 간단하게 정의할 수 있습니다. 위의 함수를 변경하면 아래와 같습니다.

add_lambda = []
add_func = lambda x:add_lambda.append(x+1)  # 람다 함수
for x in [1, 2, 3]:
    add_func(x)

print(add_lambda)

3. 파이썬 내장 함수

 : 파이썬에서 기본으로 제공하는 함수로 대표적인 내장 함수로는 sum, max, min, len, enumerate, range, list, eval, map, filter, int, str, round 등이 있습니다. 흔하지 않은 함수만 몇 가지 살펴보겠습니다.

 

⑴ enumertate 함수

 : 리스트, 투플 등 원소 값에 순서가 있는 자료형을 입력받아 개별 원소를 인덱스 숫자와 함께 반환해 주는 함수

numbers = [1, 2, 3, 4, 5, 6, 7, 8]
for i, num in enumerate(numbers):
    print(i, num)

# 출력 결과
# 0 1
# 1 2
# 2 3
# 3 4
# 4 5
# 5 6
# 6 7
# 7 8

⑵ eval 함수

 : 문자열을 입력받아 파이썬 코드로 변환하여 실행하는 함수

numbers = [1, 2, 3, 4, 5, 6, 7, 8]
eval('print(numbers)')

# 출력 결과
# 1, 2, 3, 4, 5, 6, 7, 8

⑶ map 함수

 : 여러 개의 원소를 갖는 자료형(리스트, 투플 등)과 이들 원소를 입력값으로 받는 함수를 매개변수로 갖는 함수. numbers 리스트의 원소들을 하나씩 add_one 함수에 입력 후 실행한 결과값이 순서대로 반환됨

numbers = [1, 2, 3, 4, 5, 6, 7, 8]
add_one = lambda x:x+1
result = map(add_one, numbers)

print(list(result))

# 출력 결과
# [2, 3, 4, 5, 6, 7, 8, 9]

⑷ zip 함수

 : 원소 개수가 같은 자료형들에 대하여 각 원소들을 인덱스 순서대로 매핑하여 짝은 짓는 함수. 자료형은 투플 형태를 가지며 for 반복문에서 사용하는 반복 객체를 만들 때 주로 이용됨

chars = ['a', 'b', 'c']
number = [1, 2, 3]
pairs = zip(chars, number)

print(list(pairs))

# 출력 결과
# [('a', 1), ('b', 2), ('c', 3)]

 

클래스

여러 개의 함수를 내부 메소드로 지정할 수 있고, 다양한 자료형 데이터를 내부 속성으로 가질 수 있습니다. 예약어는 class를 사용하여 클래스 이름 뒤에 콜론(:)을 붙이면 됩니다.

class Calculaor:

    # __init__ 함수는 클래스 객체가 생성될 때 자동 실행되는 함수로 반드시 선언해주어야함
    def __init__(self, num1, num2):
        self.num1 = num1
        self.num2 = num2
        self.result = 0

    def add(self):
        self.result = self.num1 + self.num2
        return self.result

    def subtract(self):
        self.result = self.num1 - self.num2
        return self.result

cal = Calculaor(1, 2)

print(cal.add())  # 3
print(cal.subtract())  # -1

위와 같이 여러 개의 메소드를 각각 정의하고, cal 클래스 객체를 만들어서 cal.add() 등으로 하나의 메소드를 호출할 수 있습니다.

반응형