관리 메뉴

NineTwo meet you

[파이썬기초] 함수 본문

프로그래밍언어/파이썬

[파이썬기초] 함수

NineTwo 2020. 9. 23. 14:13
반응형

y = f(x)

 

수학에서 배웠듯이 함수는 y = f(x)의 형태다.

쉽게 반복적으로 사용되는 가치 있는 부분(f)을 만들어 입력값(x)이 주어졌을 때 결괏값(y)을 돌려주는 것이다.

1. 입력값과 결괏값 둘 다 존재하는 경우

def 함수명(매개변수):
    수행할 문장 1
    수행할 문장 2
    ...
    return 결괏값

#사용 1
>>>변수 = 함수명(매개변수)

# 사용 2
>>>함수명(매개변수)
def sum(num1, num2):
    return num1+num2

>>>sum(1,2)
3

2. 입력값만 존재하는 경우

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

#사용
>>>함수명(매개변수)
def hi(str):
    print("hi {}~~!". format(str))

>>>hi("Woody")
hi Woody~~!

3. 결괏값만 존재하는 경우

def 함수명():
    수행할 문장 1
    수행할 문장 2
    ...
    return 결괏값

#사용 1
>>>변수 = 함수명()

# 사용 2
>>>함수명()
def say():
    return "hello python world!!"

>>>say()
'Hello python world'

4. 입력값과 결괏값 모두 존재하지 않는 경우

def 함수명():
    수행할 문장 1
    수행할 문장 2
    ...

#사용
>>>함수명()
def star():
    print("  *  ")
    print(" *** ")
    print("*****")
    print(" *** ")
    print("  *  ")

>>>star()
  *
 ***
*****
 ***
  *

매개변수 parameter

함수에 입력으로 전달된 값을 받는 변수를 의미한다.

def sum(a, b): #a와 b가 매개변수
    return a+b

인수 argument

함수 호출 시 전달하는 입력값을 의미한다.

result = sum(2, 5) #2와 5가 인수

매개변수 기본값 설정

함수 호출 시 인수값을 기본값으로 미리 설정해두면 특정 인수를 지정하지 않을 때 기본값을 사용하게 된다.

단, 기본값을 설정하고 싶은 인수는 항상 뒤쪽에 위치시켜야 한다.

def printABC(a = 1, b = 2, c = 3):
    print(a, b, c)

>>>printABC(123,456,789)
123 456 789
>>>printABC(123,456)
123 456 3
>>>printABC(123)
123 2 3
>>>printABC()
1 2 3

매개변수 지정하여 호출

함수를 호출할 때 순서대로 작성하지 않아도 매개변수의 이름으로 값을 지정하여 호출할 수 있다.

단, 한 변수에 중복해서 값을 지정할 수 없고 기본값이 지정되어있지 않은 변수는 앞에 위치시켜야 한다.

def printABC(a, b = 8, c = 6):
    print(a)
    print(b)
    print(c)

#순서 상관없이 매개변수의 이름으로 값을 지정해 호출 가능
>>>printABC(c = 3, a = 1, b = 2)
1
2
3

#기본값이 지정되지 않은 변수를 앞에 지정하지 않아 오류 발생
>>> printABC(c = 3, 2, b = 2)
File "<stdin>", line 1 SyntaxError: positional argument follows keyword argument

#기본값이 지정되지 않은 변수를 앞에 지정한 경우 오류가 발생하지 않음
>>> printABC(2, b = 7)
2
7
6

#한 변수를 여러 번 사용해 오류 발생
>>> printABC(2, b = 7, b = 9)
File "<stdin>", line 1 SyntaxError: keyword argument repeated

*매개변수 호출

매개변수의 개수가 지정되어있지 않고 가변 길이의 인자일 때 사용한다.

사용하면 매개변수를 튜플로 받는 것을 확인할 수 있다.

def 함수명(*args):
    수행할 문장 1
    수행할 문장 2
    ... 
def tuplePrint(*arg):
    print(type(arg))

# *arg로 받은 매개변수가 튜플인 것을 확인할 수 있다.
>>> tuplePrint(1,2,3)
<class 'tuple'>

def sumAll(*arg):
    sum = 0
    for i in arg:
        sum += i
    return sum

>>> sumAll(1,2,3,4,5,6,7,8,9)
45
>>> sumAll(1,2,3,4,5)
15

**매개변수 호출

입력값들을 모두 딕셔너리로 받는 것을 확인할 수 있다.
앞에서 매개변수를 지정해서 함수를 호출하듯이 불러야 한다.
변수 = 값, 변수 = 값
변수가 키가 되고 값이. value가 된다.
다만 이런 식으로 선언 시 변수에는 숫자가 들어갈 수 없다.

def 함수명(**args):
    수행할 문장 1
    수행할 문장 2
    ... 

return 값 이용

보통 return값이 1개인데 여러 개를 사용할 수도 있다.

이런 경우 리턴 값을 여러 개를 지정한 경우 각각을 변수에 저장하여 사용하거나 한꺼번에 튜플로 받을 수 있다.

def sumAvg(*arg):
    c = 0
    s = 0
    a = 0
    for i in arg:
        c += 1
        s += i
    a = s/c
    return s, a

>>> sumAvg(1,2,3,4,5)
(15, 3.0)

>>> sum, avg = sumAvg(1,2,3,4,5)
>>> sum
15
>>> avg
3.0

>>> t = sumAvg(1,2,3,4,5)
>>> t
(15, 3.0)
>>>type(t)
<class 'tuple'>

global

함수에서 return을 사용하는 이유는 함수 안에서 사용했던 변수의 값을 함수 밖에서도 사용하기 위해서다.

return을 사용하지 않고 함수 안에 변수를 밖에서도 사용하고 싶다면 global을 이용할 수 있다.

>>>s = 0
>>> def Num():
    global s
    s += 100
 
>>> s
0
>>> Num()
>>> s
100

lambda

  • 함수를 생성하는 예약어로 def와 같은 기능을 수행한다.
  • 단일문장으로 표현되는 익명의 함수를 의미한다.
  • 익명함수 : 이름없는 구현체만 존재하는 간단한 함수를 의미한다.
  • 코드상에서 한번만 사용되는 기능이 있을때 굳이 함수로 만들지 않고 1회성으로 사용할때 사용한다.
  • lambda에 유용하게 사용되는 함수
    • filter : 특정 조건을 만족하는 요소만 남기고 필터링한다.
    • map : 각 원소를 주어진 수식에 따라 변형하고 새로운 리스트를 반환한다.
    • reduce : 마지막 한개의 값이 남을때까지 차례대로 앞의 2개의 원소를 가지고 연산을 수행하고 마지막 한개의 값을 출력한다.
함수명 = lambda 매개변수 1, 매개변수 2,... : 매개변수를 이용한 표현식
def farm(a, b):
    print("감자는 {} 개 남았습니다.\n고구마는 {}개 남았습니 다.". format(a, b))
>>> farm = lambda a, b : print("감자는 {} 개 남았습니다.\n고구마는 {}개 남았습니 다.". format(a, b))
>>> farm(5,4)
감자는 5개 남았습니다.
고구마는 4개 남았습니다.
반응형
Comments