5. 함수

Pywiki
Sam (토론 | 기여)님의 2022년 2월 14일 (월) 09:24 판
둘러보기로 가기 검색하러 가기

함수의 사용에 대한 문서.

1 개요

인수를 넣어주면 일정한 연산을 수행하는 기능.

반복된 프로그래밍을 피하고 전체적인 가독성을 높이기 위해, 쉬운 유지보수를 위해 사용한다.

2 선언

2.1 선언위치

사용하기 전에 선언되어야 한다.(보통은 맨 위에)

다른 언어와 달리 탭 1회나 띄어쓰기 4회로 함수 내 명령을 구분한다.(가독성을 위해)

형태 방법
기본형식
def 함수명(인수값):
    명령
인수가 없이 만들 수도 있다.
반환값 만들기 결과값을 반환하지 않는 함수를 프로시저라 부른다.
def 함수명(인수값):
    명령
    return 반환값
변수명 = 함수명(인수값) 형태로 반환값을 객체에 담을 수도 있다.
인수가 여러개일 때
def 함수명(인수1, 인수2):
    명령
    return 반환값
반환값이 여러개일 때
def 함수명(인수1, 인수2, ...):
    명령
    return 반환값1, 반환값2, ...
여러 결과를 통째로 반환하면 튜플 형태로 받는다.

변수1, 변수2 = 함수() # 이 형태로 사용하면 반환하는 순서대로 변수에 대입된다.

인수에 기본값을 지정할 때
def 함수명(인수1, 인수2=기본값):
    명령
    return 반환값
함수의 타입을 지정할 때

(타입 힌팅)

(입력)

함수가 받아들이는 타입을 제한할 수 있다.
def 함수명(인수1: 타입, 인수2: 타입 = 기본값):
    명령
    return 반환값
타입을 제한하고 기본값을 넣을 수도 있다.
함수의 타입을 지정할 때

(타입 힌팅)

(반환)

함수가 밷는 타입에 대한 힌트를 줄 수 있다.
def 함수명(인수, 인수2) -> 타입:
    명령
    return 반환값
반환 타입을 지정한다. 리스트 따위를 넣을 수 있다.
함수에 대한 설명을 넣을 때 함수값을 기입할 때 볼 수 있다.
def 함수명(인수)
    """함수에 대한 설명"""
    명령

함수 안에서 함수를 불러오는 등 다양하게 사용할 수 있다.

2.2 가변인수

형태 방법
인수가 넣어질 때와 안넣어질 때를 구분할 대.
def 함수명(인수1, 인수2, 인수3=기본값):
    명령
    return 반환값1, 반환값2, ...
위 형태를 넣으면 인수3을 넣어도 되고 안넣어도 된다.
인수의 갯수, 값을 특정할 수 없을 때.

가변인수를 사용한다.

주어진 인수의 갯수를 넘어 더 많은 인수를 기입하게 되면 튜플형태로 입력된다.


args 안에 데이터가 담겨, 이를 이용할 수 있다.

def 함수명(인수1, 인수2, ..., *args):
    for i in args:
        명령
    return 반환값1, 반환값2, ...
가변인수는 가장 뒤에 두며, 이들은 튜플형태로 저장된다.

튜플명은 인수명으로.

일반적으로 arguments의 약자인 args를 쓴다.

튜플이 아닌 딕셔너리로 가변인수.


args와 같이 쓰면, 데이터만 들어온 경우 args에 튜플로 담기고,

변수명 = 3 형태로 들어온 경우 kwargs에 사전형으로 담긴다.

def 함수명(인수1, 인수2, ..., **kwargs):
    for x, y in kwargs.items():
        명령
    return 반환값1, 반환값2, ...
딕셔너리 인수를 넣을 땐 키=값 형태로 기입한다.

일반적으로 keyword arguments의 약자인 kwargs를 쓴다.

2.3 사용

함수명(인수) 형태로 사용한다.

2.4 tip. 인수가 너무 많을 때

인수가 너무 많을 때 중간에 새로운 인수를 끼워넣어 함수를 편집하게 되면 기존에 사용하던 명령이 어그러질 위험이 있다. 다시 고치기도 귀찮고. 그럴 땐

함수명(인수=입력값)형태로 사용하면 인수의 순서를 고려하지 않고도 함수를 사용할 수 있다.

3 특성

3.1 지역변수와 전역변수

기본적으로 함수 내부에서 정해진 변수는 사용이 끝나면 지워진다.

지역변수 : 함수 안에서만 쓰이는 변수.

전역변수 : 함수 안팎으로 쓰이는 글로벌한 변수.

이름이 겹칠 때 전역변수를 사용하고 싶다면 global 변수명을 붙여준다.

3.2 전역변수의 사용

에러 원인 해결법
UnboundLocalError: local variable '변수명' referenced before assignment 함수 밖의 전역변수를 인식하지 못했을 때. 함수 초반에

global 변수명을 넣어준다.

nonlocal 함수 안에서 함수를 또 정의할 때 상위함수의 변수를 다루고 싶다면 nonlocal 변수명을 넣어준다.(한단계 위의 변수를 찾는다.)

함수 안의 함수는 closure라고 한다.

4 ps