Posts 함수(1)
Post
Cancel

함수(1)

1. 함수


1.1 함수란?

  • 반복되는 코드를 묶음으로 효율적인 코드를 작성하도록 해주는 기능
  • 기본 함수
  • 파라미터와 아규먼트
  • 리턴
  • *args, **kwargs
  • docstring
  • scope
  • inner funcion
  • lambda function
  • map, filter, reduce
  • decorator

2. 기본 함수


2.1 기본 함수란?

  • 함수의 선언과 호출


2.2 코드 생성

1
2
3
4
5
6
7
8
9
10
point = 88

if point >= 90:
    print('A')

elif point >= 80:
    print('B')

else :
    print('C')
1
B
  • 함수를 사용하지 않으면 매번 이렇게 작성한 코드를 실행시켜야 한다.


2.3 함수 만들기

1
2
3
4
5
6
7
8
9
10
def grade(point):
    
    if point >= 90:
        print('A')

    elif point >= 80:
        print('B')

    else :
        print('C')


1
grade(90)
1
A
  • 위에서 작성한 코드를 함수로 만들어 만들었다.
  • 함수는 def 함수명(파라미터) 로 생성한다.


3. 파라미터와 아규먼트


3.1 파라미터와 아규먼트란?

  • 파라미터 : 함수를 선언할때 호출하는 부분에서 보내주는 데이터를 받는 함수
  • 아규먼트 : 함수를 호출할때 함수에 보내주는 데이터


3.1.1 파라미터

1
2
3
# 파라미터
def plus(num1, num2):
    print(num1 + num2)
  • num1과 num2과 파라미터 이다


3.1.2 아규먼트

1
2
# 아규먼트
plus(1, 2)
1
3
  • plus 함수에서 1과 2를 아규먼트라고 한다


3.2 아규먼트와 함수가 다르다면

1
2
# 아규먼트를 함수와 다르게 보내주면 에러뜸
plus(1, 2, 3)
1
2
3
4
5
6
7
8
9
10
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-10-c1a4c39a8c98> in <module>
      1 # 아규먼트를 함수와 다르게 보내주면 에러뜸
----> 2 plus(1, 2, 3)


TypeError: plus() takes 2 positional arguments but 3 were given
  • 만일 아규먼트를 정해진 파라미터에 맞지않게 보낸다면 에러가 남


3.3 디폴트 파라미터

1
2
3
4
5
6
# num2 = 디폴트 파라미터
def plus(num1, num2 = 10):
    print(num1 + num2)
    
# 디폴트 파라미터는 자동으로 10이 들어감
plus(3)
1
13
  • 함수 생성시 기본으로 파라미터 값을 설정해 놓는것을 디폴트 파라미터라고 함.
  • 위에서는 num2 = 10 이 기본값으로 설정되어있으며, 함수를 실행할떄 num1값만 넣으면 자동으로 됨


1
2
def plus(num1, num2 = 10, num3 = 20):
    print(num1 + num2 - num3)
1
plus(10)
1
0


1
plus(10, num3 = 100)
1
-80
  • 디폴트 파라미터에 num =10, num3 =20을 넣은 코드
  • 디폴트 파라미터 위치 혹은 인자값을 적고 다른 값을 넣는다면 디폴트 파라미터보다 우선시 된다.
    • num3 = 100으로 넣은것


4. 리턴


4.1 리턴이란

  • 함수를 실행한 결과를 저장하고 싶을때 사용
  • return
1
2
def plus(num1, num2):
    print(num1 + num2)
1
2
result = plus(1, 2)
print(result)
1
2
3
None
  • print는 결과를 저장하지 않고 출력만 함
  • result에 저장이 되지 않아 result에는 아무것도 없는 None이 반환됨


1
2
3
def plus(num1, num2):
    print(num1 + num2)
    return num1 + num2
1
2
result = plus(1,5)
print(result)
1
2
6
6
  • 만일 다른 변수에 저장을 위해선 return을 사용하여 반환시켜줘야 함


4.2 다른 변수에 저장되는 함수

1
2
3
data1 = 'python'
result = data1.upper()
result
1
'PYTHON'
  • upper는 함수내에 return값을 설정해 놓아 자동으로 저장이 된다.


4.3 다른 변수에 저장이 안되는 함수

1
2
3
4
data2 = [2, 1, 3]
result = data2.sort()
print(result)
print(data2)
1
2
None
[1, 2, 3]
  • sort는 함수에 return이 없어서 다른 변수로 저장이 안되어 result는 None값이 반환됨
  • 대신 data2 자체가 sort되어 있음 [1, 2, 3]


1
2
3
4
5
6
7
8
# 함수 선언
def grade(point):
    if point >= 90:
        return "A"
    elif point >= 80:
        return "B"
    else :
        return "C"
1
grade(80)
1
'B'


4.4 함수에서의 return의 성질

1
2
3
4
def echo(mgs):
    if mgs == 'quit':
        return print('종료 합니다')
    print(mgs)
1
echo('안녕하세요')
1
안녕하세요


1
echo('quit')
1
종료 합니다
  • 함수에서 return 코드가 실행되면 함수는 종료된다.


5. *args, **kwargs


5.1 *args, **kwargs란?

  • 함수를 호출할때 아규먼트와 키워드 아규먼트의 갯수를 특정지을수 없을때 사용


5.2 *args 예제

1
2
def plus(num1, num2):
    return num1 + num2
1
plus(1, 2)
1
3
  • 만일 파라미터를 2개로 지정하고, 아규먼트도 2개만 받을수 있다


1
2
3
def plus(*args):
    print(type(args), args)
    return sum(args)
1
plus(1, 2, 3, 4, 5)
1
2
<class 'tuple'> (1, 2, 3, 4, 5)
15
  • *args를 사용하면 아규먼트가 몇개가 들어와도 상관없다


5.3 **kwargs 예제

1
2
3
4
5
6
# 키워드 있는건 **kwargs를 사용하여야함, type은 dict
def plus(*args, **kwargs):
    print(type(args), args)
    print(type(kwargs), kwargs)
    # 키워드가 있는 건 dict로 가져오기 때문에 따로 sum을 해줌
    return sum(args) + sum(list(kwargs.values()))
1
plus(1, 2, 3, 4, 5, num1 = 100)
1
2
3
<class 'tuple'> (1, 2, 3, 4, 5)
<class 'dict'> {'num1': 100}
115
  • **kwargs는 num1 = 100처럼 키워드를 넣는 아규먼트에 사용가능
  • **kwargs는 있는 건 함수내에서 dict로 인식이 됨


5.4 List 데이터의 함수 적용(*args)

1
2
3
4
5
def func(num1, num2, num3):
    return num1 + num2 + num3
data = [1, 2, 3]

func(*data)
1
6
  • list를 *args로 사용한것
  • 함수(*ListData)를 하면 *data = func(1,2,3)으로 봄
  • func(data) # data = func([1,2,3,])리스트 데이터로 인식하여 error가뜸


5.5 Dict 데이터의 함수 적용(**kwargs)

1
2
3
4
5
data = {
    "num2" : 100,
    "num3" : 200,
}
func(1,**data) # ** 두개를 붙여서 각 키워드로 인식시킴
1
301
  • dict를 **kwargs로 사용한것
  • 함수(*DictData)를 하면 *data = func(num1 = 1, num2 = 100, num3 = 200)으로 봄
  • func(data) # data = func([1,2,3,])리스트 데이터로 인식하여 error가뜸
This post is licensed under CC BY 4.0 by the author.