본문 바로가기
파이썬/Basics(기초)

[Python] 13. 함수(function), 매개변수, 키워드 파라미터

by 쿠킷리스트 2021. 10. 9.

학습내용

#1 : 함수(function)란 무엇인가?
#2 : 파이썬 함수의 구조
#3 : 매개변수(parameter)와 인수(arguments)
#4 : 함수의 4가지 형태
#5 : 매개변수 지정하여 호출하기
#6 : 입력값의 개수를 모르는 경우
#7 : 키워드 파라미터 kwargs
#8 : 함수의 결과값은 하나
#9 : return의 값이 없는 경우
#10 : 매개변수에 초기값 미리 설정하기
#11 : 함수 안에서 선언한 변수의 효력 범위

 

#1 : 함수(function)란 무엇인가?

 입력값을 가지고 어떤 일을 수행한 다음에 그 결과물을 출력하는 것이 함수가 하는 일이다. 

※ 함수를 사용하는 이유

  • 똑같은 내용의 반복을 피할 수 있다.
  • 프로그램을 함수화 했을 때 프로그램의 흐름 파악 용이.
  • 프로그램의 파악이 용이하다는 것은 프로그램을 논리적으로 잘 짰다는 의미이며, 이는 단순한 코드의 흐름(명령어의 나열)이 아니라 사람들이 봤을 때 이해가 되는 것.
  • 함수를 호출함으로써 세세한 코드를 보지 않아도 기능을 이해할 수 있도록.

 

#2 : 파이썬 함수의 구조

 def는 함수를 만들 때 사용하는 예약어이며, 함수 이름은 임의 설정이 가능. 함수 이름 뒤 괄호 안의 매개변수는 이 함수에 입력으로 전달되는 값을 받는 변수이다. 함수를 정의한 다음 조건문, 반복문 처럼 수행할 문장을 입력.

#함수 구조
def 함수명(매개변수):
    수행할 문장1
    수행할 문장2
    ...

#예시
def sub(a,b):
    return a - b
sub(1,2)
#-1

a = 10
b = 9
c = sub(a,b)
print(c)
#1

ten = 10
five = 5
x = sub(ten, five)
print(x)
#5
  • 함수 이름 : sub
  • 입력값 : a, b
  • return : 함수의 결과값 반환 / return은 분기 하나당 하나만 사용.

 

#3 : 매개변수(parameter)와 인수(arguments)

 매개변수는 함수에 입력으로 전달된 값을 받는 변수를 의미하고, 인수는 함수를 호출할 때 전달하는 입력값을 의미한다.

def sub(a,b): #a,b: 매개변수
    return a - b
print(sub(1,2)) #1, 2: 인수
  • a, b : 매개변수
  • 1, 2 : 인수

 

#4 : 함수의 4가지 형태

 1) 일반적인 함수 : 결과값을 받을 변수 = 함수이름(입력인수1, 입력인수2, ...)

def sub(a,b):
    result = a - b
    return result
a = sub(100, 90)
print(a)
#10

 2) 입력값이 없는 함수 : 결과값을 받을 변수 = 함수이름( )

def name():
    return 'def'
a = name()
print(a)
#def

 3) 결과값이 없는 함수 : 함수이름(입력인수1, 입력인수2, ...)

def sub(a,b):
    print("%d, %d의 차이는 %d 입니다." %(a,b,a-b))
a = sub(100,90)
print(a)
# 100, 90의 차이는 10 입니다.
# None

 4) 입력값도, 결과값도 없는 함수 : 함수이름( )

def name():
    print('def')

a = name()
print(a)
# def
# None

 

#5 : 매개변수 지정하여 호출하기

 함수를 호출할 때 매개변수를 지정할 수도 있다. 매개변수를 지정해주면 순서와 상관없이 똑같은 결과값이 나온다.

def sub(a,b):
    return a - b
result = sub(a=100, b=90)
print(result)
#10

def sub(a,b):
    return a - b
result = sub(b=90, a=100)
print(result)
#10

 

#6 : 입력값의 개수를 모르는 경우

 일반적으로 볼 수 있는 함수 형태에서 괄호 안의 매개변수 부분을 *매개변수로 작성한다. *매개변수로 작성하면 매개변수 개수와 상관없이 매개변수를 보낼 수 있다.

1) 기본 구조와 예시1

#구조
def 함수이름(*매개변수):
    수행할 문장
    ...

#예시
def add(*args):
    result = 0
    for i in args:
        result = result + i
    return result
result = add(1,10,100,1000)
print(result)
#1111
print(add(1,10,100,1000,10000,100000,1000000))
#1111111

2) 예시 2

def add_mul(sel, *args):
    if sel == 'add':
        result = 0
        for i in args:
            result = result + i
    elif sel == 'mul':
        result = 1
        for i in args:
            result = result * i
    return result

result = add_mul('add', 1,10,100,1000)
print(result)
#1111
result = add_mul('mul', 1,10,100)
print(result)
#1000
  • *가 붙지 않은 매개변수는 필수, *가 붙은 매개변수는 자유롭게.

 

#7 : 키워드 파라미터 kwargs

 키워드 파라미터를 사용할 때는 매개변수 앞에 별 두 개(**)를 붙인다. 매개변수 앞에 **을 붙이면 매개변수는 딕셔너리가 되고 모든 key = value 형태의 결과값이 그 딕셔너리에 저장된다. key 값은 문자열 형태로 저장된다.

def print_kwargs(**kwargs):
    print(kwargs)
print_kwargs(a=1)
#{'a': 1}
print_kwargs(name='python', year = 2021)
#{'name': 'python', 'year': 2021}

def dict(**a):
    print(a)
dict(b=1)
#{'b': 1}

 

#8 : 함수의 결과값은 하나

 함수의 결과값은 하나이다. 하지만, 파이썬에서 return을 여러개하면 결과값이 하나의 객체인 tuple로 묶인다. 따라서 tuple 안에 여러 결과값이 담길 수 있으며, 이를 활용해서 여러개의 결과값을 출력할 수 있다.

def add_mul(a, b):
    return a+b, a*b
result = add_mul(10,100)
print(result)
#(110, 1000)

def add_mul(a, b):
    return a+b, a*b
result_1, result_2 = add_mul(10,100)
print(add_mul(10,100))
print(result_1)
print(result_2)
# (110, 1000)
# 110
# 1000

 

#9 : return의 값이 없는 경우

 특정 상황에서 함수를 빠져나가고 싶을 때 return을 단독으로 사용해 즉시 빠져나갈 수 있다. break와 유사.

def f_name(name):
    if name == 'math':
        return
    print("I'm studying %s" %name)
f_name('python')
#I'm studying python
f_name('math')
#

 

#10 : 매개변수에 초기값 미리 설정하기

 초기화시키고 싶은 매개변수는 항상 맨 마지막에 작성해야한다. M=True 값을 앞으로 옮긴다면 info('kim', 27)의 'kim'd은 첫번째 매개변수인가? 두번째 매개변수인가? 따라서, 초기화시키고 싶은 매개변수는 마지막에 작성하여야 생략할 때 문법적으로 어색함이 없고 문제가 없다.

def info(name, age, M=True):
    print("My name is %s"%name)
    print("I'm %d years old."%age)
    if M:
        print("Male")
    else:
        print("Female")
        
info('kim', 27)
# My name is kim
# I'm 27 years old.
# Male
info('han', 24, True)
# My name is han
# I'm 24 years old.
# Male
info('joe', 27, False)
# My name is joe
# I'm 27 years old.
# Female

 

#11 : 함수 안에서 선언한 변수의 효력 범위

 함수 안에서 사용하는 매개변수는 함수 밖의 변수 이름과는 전혀 상관 없다. 함수 안에서 선언한 매개변수(지역변수)는 함수 안에서만 사용될 뿐 함수 밖에서는 사용되지 않는다.

  • 지역변수 : 함수 안에서만 사용될 뿐 밖에서는 사용되지 않는다.
  • 전역변수 : 어디서든 사용할 수 있다.
def var(a):
    a = a + 1
    return a
print(var(4))
#5
print(a)
#None

1) 함수 안에서 함수 밖의 변수를 변경하기(return)

a = 1 #전체의 a
def var(a): #함수의 a
    a = a + 1 #함수의 a
    return a #함수의 a
a = var(a) #전체의 a
print(a) #전체의 a
#2
  • 함수 자체를 a에 담아줌으로써 밖의 변수를 변경시키는 것.

2) 함수 안에서 함수 밖의 변수를 변경하기(global)

a = 1
def var():
    global a
    a = a+1
var()
print(a)
#2
  • 함수 내에서 global a를 통해 전역 변수 a = 1를 가져와 사용해 함수 내의 a도 전역변수 a이다.

 

느낀 점

 프로그래밍의 세계는 참 무궁무진하다. 어떻게 이런 걸 구현했을까 싶다. 자료구조, 컴퓨터 공학 등의 내용이 더 궁금해진다. 어떻게 저장되고, 어떻게 불러와지는지. 관련 온라인 강의나 책을 찾아봐야겠다.

댓글