Py) 기초 - 함수

Py) 기초 - 함수

파이썬 기반 데이터분석을 위하여 파이썬 함수 기초에 대해 알아본다.


함수의 구성

함수는 함수명, 소괄호, 인자, 인수로 구성되며 인자와 인수는 생략될 수 있다.
함수명: 주로 영어로 명명되며 경우에 따라 숫자와 특수문자가 포함될 수 있다.
소괄호: 각종 인자와 인수를 모아서 함수에 전달하는 역할을 한다.
인자: 영어로 argument라고도 하며 파라미터, 옵션 등 다양한 용어로 불림. 하나의 함수에 복수개의 인자를 사용하는 경우 그 구분은 쉼표로 한다.
인수: 인자에 할당되는 숫자이나 할당되는 문자 또는 객체를 포함하기도 한다.

함수의 종류

내장함수: Python에서 기본적으로 제공하는 함수
사용자 정의 함수: 사용자가 직접 제작한 함수
라이브러리 함수: 패키징이 되어있는 사용자 정의 함수

내장함수를 제외한 함수를 사용하고자 할 때 관련 코드를 실행해야 한다. 그리고 새로운 세션인 경우 다시 관련 코드를 실행해야한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
pow(2, 4) # 지수연산
## 16

str(23)
## 문자(열)로 변환

int("999") # 정수(integer)로 변환
## 999

int(2.34)
## 2

int(True)
## 1

int(False)
## 0

float("1.23") # 실수
## 1.23

주피터 노트북의 경우 각 셀을 실행시킬 때 print() 함수를 사용하지 않아도 출력이 가능하나 별도의 출력형식이 필요하거나 반복문 중간 연산결과를 출력하고자 할 때 print() 함수를 사용할 수 있다.

1
2
3
4
5
6
7
8
9
print(123)
### 123

print(123, "abc", 456) # 원소를 연산자 또는 함수로 연결하지 않아도 쉼표로 구분하여 출력 가능
## 123 abc 456

help(print) # 특정 함수의 도움말 출력

dir(pow) # 함수 또는 객체 내부의 어트리뷰트 또는 메서드 목록 확인 가능

사용자 정의 함수

개요

사용자 정의 함수(UDF, User Defined Function)는 각종 함수, 연산자 등 다양한 요소를 조합하여 생성하며 정의를 뜻하는 define 단어의 줄임말인 “def”를 코드 앞에 사용하여 함수를 정의한다.

생성

  • 함수명
    주로 영문자, 숫자, 특수문자로 구성하며 함수명의 시작은 영문자를 권장한다. 특수 문자는 되도록이면 언더바(_)만 사용한다.
    명명법과 관련해서는 대표적으로 카멜 표기법(Camel Case), 파스칼 표기법(Pascal Case), 스네이크 표기법(Snake Case)이 있다.
    ※ 표기법 관련 상세 설명 -> 링크

  • 인자와 인수
    인자의 명명 또한 함수명명 규칙을 따르는 것을 권장. 인자의 경우 기본으로 할당된 인수를 지정할 수 있다.

  • 정의
    “def” 로 시작하며 함수명, 소괄호 및 인자/인수를 차례대로 나열하고 마지막에 콜론으로 마무리를 한다. 함수 실행시 동작하는 코드는 반드시 들여쓰기를 실시하고 이 들여쓰기는 4칸 띄어쓰기 또는 한 번의 Tab으로 처리하며 Tab을 사용하는 것을 권장한다.

  • 연산 결과의 처리
    함수의 중간 또는 최종 연산 결과를 “출력”하기 위해서는 print() 함수를 사용하고 중간 또는 최종 연산 결과를 “반환”하기 위해서는 “return” 명령어를 사용한다. 일반적으로 “return”은 사용자 정의 함수 가장 마지막에 선언한다.

  • 기타
    들여쓰기를 지키지 않을 경우 에러가 발생하거나 의도한 함수가 만들어지지 않을 수 있다. “def” 로 함수를 선언하는 줄 이외에 함수 실행시 동작하는 코드는 반드시 1수준(공백 2칸, 4칸, tab) 이상 들여쓰기가 되어야 한다.

사용

사용자 정의 함수는 사용자 정의 함수 정의 코드를 실행한 후 사용이 가능하며 다음과 같은 경우에 관련 코드를 다시 실행해야 한다.

1) 세션 재부팅시
2) 신규 노트북 생성시
3) 노트북 프로그램 재실행시

입력도 출력도 없는 함수

1
2
3
4
def udf01():
None

udf01()

입력이 없으나 출력 또는 반환값이 있는 함수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def udf02():
print([1, 2, 3])

def udf03():
return [1, 2, 3]

aa = udf02()
print(type(aa))
## [1, 2, 3]
## <class 'NoneType'>

bb = udf03()
print(type(bb))
## <class 'list'>

return 또는 print()가 없으면 반환 또는 출력 내용이 없음

1
2
3
4
5
def udf04():
234

cc = udf04()
cc

입력은 있으나 출력은 없는 것

1
2
3
4
def udf05(x):
None

udf05(123)

입력과 출력/반환이 있는 것

1
2
3
4
5
6
7
8
9
10
11
def udf06(x):
return x

def udf07(x):
return x * 5

udf06(5)
## 5

udf07(5)
## 25

udf06() 의 경우 입력값이 없으면 다음과 같이 에러가 발생한다. 해당 메세지는 인자(argumet) x 에 값이 할당되어야 하는데 그러지 못했다는 것을 뜻한다.

1
2
udf06()
## Error: udf06() missing 1 required positional argument: 'x'

인자에 기본값이 할당되어 있는 경우 입력값이 없어도 에러 없이 실행되며 이 때 기본값으로 함수가 실행된다. 그리고 별도의 입력값이 있을 경우 기본값을 무시하고 해당 입력값으로 함수가 실행된다. 그리고 이렇게 함수의 인자에 기본값을 지정하는 이유는 해당 인자에 그 기본값을 사용하는 경우가 매우 빈번한 경우 함수 운용의 편의를 위함이다.

1
2
3
4
5
6
7
8
def udf08(x = 2):
return x ** 3

udf08()
## 8

udf08(3)
## 27

인자가 2개 이상 있는 경우 두 인자 모두 기본값이 없다면 둘 중 하나라도 입력값이 없다면 에러가 발생되며 인자를 명시하지 않으면 함수에 설계된 인자 순서대로 값이 할당된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def udf09(x, y):
cal_x = x * 2
cal_y = y ** 2
return cal_x + cal_y

udf09(x = 2, y = 20)
## 404

udf09(2, 20)
## 404

udf09(20, 2)
## 44

udf09(y = 20, x = 2)
## 404

인자가 2개 이상이면서 기본값이 있는 경우 함수 생성시 기본값이 있는 인자는 기본값이 없는 인자 다음에 배치되어야 한다.

1
2
3
4
5
6
7
8
9
# def udf10(x = 3, y):
# return x + y
# SyntaxError: non-default argument follows default argument ??

def udf10(x, y = 3):
return x + y

def udf11(x = 2, y = 3):
return x + y
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×