2 분 소요


Function

Function이란?

수학적인 의미의 함수와 개념은 비슷하지만 역할이 다르다.

  • input이 들어와서 output이 정해진 규칙에 따라 나온다는 개념은 같지만, 프로그램에서의 하나의 함수는 하나의 기능을 나타낸다.

    하나의 기능 : 입력받은 2개의 숫자를 더한다, 들어온 텍스트를 정제한다, 받은 이미지를 greyscale로 변경한다.

  • 정확하게 함수는 특정 기능을 구현한 코드 묶음이다.

    하나의 기능을 구현하기 위한 코드들을 함수라고 부른다.

  • def 함수이름(param1, param2, … ): return

  • 함수를 쓰는 이유는 재사용성 때문이다.

함수를 사용하는 가장 중요한 이유는 재사용성 때문이다. Reusability라고 하며, 똑같은 구조의 코드가 반복되는 것을 피하기 위해 사용된다. 똑같은 구조의 코드는 보통 한 가지의 기능 단위로 묶이게 되며, 이 기능 단위를 코드로 묶어서 함수로 만든다.

Python Function Definition

In [1]:
def add(a, b):
    c = a + b
    return c

add(10, 11)
Out [1]:
21
In [2]:
def sub(a, b):
    c = a - b
    return c

def mul(a, b):
    return a * b

def div(a, b):
    if b ==0:
        return 0
    return a / b
In [3]:
a = 10
b = 0
print("Sub :", sub(a, b))
print("Mul :", mul(a, b))
print("Div :", sub(a, b))
Out [3]:
Sub : 10
Mul : 0
Div : 10

함수의 다양한 형태

함수 parameter와 return이 모두 존재

In [None]:
def add(a, b):
    return a + b

함수 parameter는 없고 return이 존재

In [None]:
def get_data():
    data = pd.read_csv("test.csv")
    return data

함수 parameter는 있지만 return이 없음

In [None]:
def print_name(name):
    print(name)
    
def save_data(path, data):
    data.to_csv(path)

함수 parameter와 retrun이 모두 없음

In [None]:
def say_hi():
    print("Hi!")
    
def save_txt():
    with open("test.txt", 'w') as f:
        f.write(txt)

parameter의 갯수를 모를 경우

In [4]:
def add_many(*args): # *(asterisk)를 앞에 붙이는 것으로 여러개의 parameter를 받아서 tuple로 변환하여 준다.   
    #print(args, type(args))
    total = 0
    for num in args:
        total += num

    return total
    
add_many(1, 2, 3)
Out [4]:
6

parameter가 너무 많아서 몇 개만 입력 parameter로 넣고 싶을 땐 어떻게 해야할까?

  • 아래는 scikit-learn 라이브러리에 있는 logistic regression 모델의 init 함수 코드이다.

  • parameter가 너무 많아서, 다 외울수도 없다. 이럴 땐 default parameter를 지정해놓고, 필요한 parameter만 입력받는다.

  • 이렇게 정의되는 함수의 parameter를 keyword parameter 라고 한다.

In [5]:
def default_add10(a, b=10):
    return a + b

default_add10(5)
Out [5]:
15

img

파라미터에 대해 조금 더 알아봅시다!

  • 함수에서 사용되는 변수들에게는 효력 범위와 수명이 있다.

    효력 범위 : range, 수명 : lifetime

In [6]:
# 함수의 파라미터 변수 이름과, 함수를 호출하는 argument의 이름이 같은 경우
def full_name(a ,b):
    # local variable, 지역 변수
    c = a + b # local
    print("MY NAME IS ", c)
    # return name


last = "HONG"
First = "GILDONG"

# name = "kim" # global
# #name = change_name(name)

full_name(last, First)
Out [6]:
MY NAME IS  HONGGILDONG

Lambda 함수

Lambda Expression

  • 굉장히 간단한 함수가 있는 경우, 한 줄짜리 함수로 간편하게 사용할 수 있다.

    inline function, def라고 하는 명령어 없이 간단하게 정의해서 사용할 수 있다.

  • 이런 함수를 Lambda 함수라고 하며, lambda 함수와 반복문을 통해 함수의 정의없이 다양한 프로그래밍이 가능하다.
In [7]:
def add(a, b):
    return a+b

# a, b는 input parameter들, a+b는 return되는 output parameter.
f = lambda a, b: a+b

print(add(3, 5))
print(f(3, 5))
Out [7]:
8
8

In [8]:
def return_length(s):
    return len(s)

lenf = lambda s: len(s)

print(return_length("abcde"))
print(lenf("abcde"))
Out [8]:
5
5

In [9]:
# 리스트의 원소들을 원소들의 길이에 따라 정렬
strings = ['yoon', 'kim', 'jessica', 'jeong']
strings.sort(key=lambda s: len(s))
# sort(*, key=None, reverse=False) 키로 지정된 값에 의해 요소들이 한번 계산되고 그 결과를 바탕으로 정렬
strings
Out [9]:
['kim', 'yoon', 'jeong', 'jessica']

Python 내장함수

In [10]:
# 수학 계산
import math

print(abs(-3))  # 절대값
print(math.ceil(3.5))  # 올림
print(math.floor(3.3))  # 내림
print(round(3.6))  # 반올림

print(math.sin(1))  # sin
print(math.cos(1))  # cos
Out [10]:
3
4
3
4
0.8414709848078965
0.5403023058681397

In [11]:
# 복권 숫자 만들기
import random
random.sample(range(1, 46), 7)
Out [11]:
[39, 28, 23, 15, 32, 44, 26]
In [12]:
# 다양한 사전
from collections import defaultdict
from collections import OrderedDict

D = defaultdict(int)
D2 = OrderedDict()
D2['z'] = 26
D2['a'] = 1
D2['c'] = 3
D2['d'] = 5
D2['j'] = 14
D2['b'] = 2
D2
Out [12]:
OrderedDict([('z', 26), ('a', 1), ('c', 3), ('d', 5), ('j', 14), ('b', 2)])

Reference

  • 이 포스트는 SeSAC 인공지능 SW 개발자 양성 과정 - 나예진 강사님의 강의내용을 정리한 것입니다.

태그:

카테고리:

업데이트:

댓글남기기