본문 바로가기

파이썬 프로그래밍/파이썬 기초

[Python] 파이썬 함수 기초와 개념

함수(Functions)

- 코드중복을 제거하기 위한 목적으로 사용
- 코드의 중복을 제거하기 위해서 가장 필요한 문법
- 빌트인함수(Builtin Functions): print, range등
- 반환값이 없는 함수는 None값을 리턴(반환)함

함수의 구성

- 1개의 함수명(필수): 이름
- 0개 이상 인자값(옵션): 필요한 정보
- 1개의 반환값(옵션): 결과를 돌려받음


코드로 알아보는 함수의 예제

1
2
3
4
5
6
7
8
def exam(num):#함수명: exam, num받을 인자(Parameter)
    
    #인자를 반환하기 위한 
    result1 = num * 2
    result2 = result1 + 2
    result3 = result2 - 10
    
    return result3#반환값
cs
exam이라는 함수를 만들어 봤습니다.
이 함수를 어떻게 사용해볼까요?

인자값으로 표시된 중복적인 공식을 상용하고 싶을때 우리는 이렇게 사용할 수 있습니다.

사용을 하고 싶을때는 이와같이 함수명(값)을 넣어주시면 언제든지 함수가 값을 받아와서 알맞은 처리를 한 후에 반환(return)을 해주게 됩니다.



예제로 보는 함수의 사용 예


Scope(변수의 유효범위)

- 변수가 선언되어 해당 변수가 영향을 미치는 영역

- 지역변수(Local Variable)
- 함수 안에서 선언되어 함수 내에서만 사용 가능한 변수
- 전역변수(Global Variable)
- 함수 밖에서 선언되어 함수 안에서도 모두 사용 가능한 변수
- 코드의 가독성을 저하시키므로 되도록 사용하지 않는것이 바람직함
- 주로 상수(Constant) 목적으로 많이 사용되며, 파이썬에서는 따로 상수문법이 없음
- 상수명을 대문자로 사용
- 상수란 변하지 않는값을 의미

따로 상수 문법이 없기때문에 이런식으로 표기함.
- 변수의 값이 변경되는 경우, 그 유효범위를 최소화하여 지역변수를 사용하는것이 버그 발생률을 저하시킬 수 있음


Arguments(인자)

- 함수가 실행되는데 필요한 0개 이상의 변수목록

Positional Arguments

- 인자의 위치에 기반한 인자

예를 들자면 이런 경우를 말할 수 있는데, Sam = name, 26 = age를 통하여 인자의 위치에 기반한 인자 라고 할 수 있으며 이것을 Positional Arguments라고 말합니다.



Keyword Arguments

- 인자의 이름에 기반한 인자

- default인자 문법이 함께 적용: 함수 호출시 해당 인자를 지정하지 않으면 default인자값으로 값이 자동지정

그렇기때문에 Positional Arguments와는 다르게 인자값이 지정되지 않아도 미리 지정해둔 default값으로 출력이 되어 에러가 나지 않습니다.



Packing

- 인자의 갯수를 제한하지 않고, 다수의 인자를 받을 수 있음
- 다수의 Positional Arguments를 하나의 tuple로 받을 수 있음 이것을 packing이라 함

*을 써서 여러개의 값을 하나의 변수에 넣는 packing을 사용할 수 있음

tuple, packing/unpacking 정리 바로가기



Unpacking

- 인자를 넘길때 Sequence Data Type (리스트/튜플 등)을 다수의 인자인것처럼 나눠서 전달

받을때 *표기하는것이 packing이라면 보낼때 *표기하는 것은 unpacking입니다.

colors는 하나의 리스트로 있지만 unpacking을 해서 따로따로 받아오는 것을 확인할 수 있습니다.



가변인자 / Keyword Arguments

- 인자의 갯수를 제한하지 않고 다수의 인자를 받을 수 있음
- 다수의 Keyword Arguments를 dict으로 받을 수 있음(packing)

Keyword Arguments는 **로 구분할 수 있습니다.


이와같이 가변인자를 지정하지 않아도 인자를 받을 수 있지만, 가급적 인자로 받을 keyword인자를 모두 지정하는 것이 코드관리에 도움됩니다.



함수 정의시 가변인자 정의가 유용할 경우는?

- 클래스 상속에서 부모의 멤버함수를 재정의(오버라이딩)할때 유용함
- 부모의 멤버함수에서 어떤 인자를 받던, 자식클래스의 멤버함수는 받은인자 그대로 부모에게 넘겨줄때

이런식으로 보면 쉽게 볼수 있습니다.

*args, **kwargs는 부모에게 무엇을 받던 받은 그대로를 부모에게 돌려주는 뜻입니다.



Anonymous Function(익명함수)

- 파이썬에서는 lambda식을 통해 익명함수 생성

- return 문을 쓰지 않아도 마지막 값을 리턴으로 처리

- 대개 인자로 1줄 함수를 지정할 때 사용

- 일반 함수와 인자처리도 동일하게 처리(Positional Arguments, Keyword Arguments)


1급객체

- 다른 객체들에 적용 가능한 연산을 모두 지원하는 객체(객체를 변수처럼 사용한다는 뜻)
- 인자로 넘기기, 변수에 대입하기 등
- 종류: 일급 함수/클래스/컨트롤/타입/데이터타입 등


1급함수/클래스

- 함수/클래스를 런타임에 생성 가능

- 함수/클래스를 변수에 할당이 가능

- 함수/클래스를 인자나 리턴값으로 전달 가능


함수안에 함수를 직접 넘겨서 사용할 수 있는 특징을 가지고 있음.



High Order Function(고차함수)

- 다른 함수를 생산/소비하는 함수
- 다른 함수를 인자로 받거나, 그 결과로 함수를 반환하는 함수




본 게시글은 nomade.kr의 파이썬 강의를 시청하고 정리한 게시글입니다.



함수에 대해서 사용법은 알고있었지만 정리하면서 몰랐던 부분도 알게되고 다시한번 머릿속에 정리하는 계기가 되었습니다.