함수(function)
프로그래밍에서 함수(function)는 독립적으로 설계된 프로그램 코드의 집합입니다. 함수를 사용하면 반복적인 코드의 양을 줄여 유지보수성을 높여줍니다.
### 함수 정의부
def 함수명(인자, 인자,...): ## parameter : 인자
함수코드...
return 반환값
### 메인코드
x = 함수명(인수, 인수, ...) ## argument : 인수
print("결과값 :", x)
- 함수가 호출되면 함수정의부로 가서 함수 호출부의 인수 값을 함수 정의부 인자값에 순서대로 대입
- 함수 정의부 내부 코드를 순차적으로 실행
- 해당 함수에 return 값이 있는 경우, 함수 호출부를 return 값으로 치환
- 파이썬은 오버로딩(overloading) 불가
프로그래밍에서의 함수(function)
함수의 장점
- 코드의 중복을 줄일 수 있어서 유지보수에 좋습니다.
- 코드를 목적에 맞게 쓸 수 있습니다.
- 중복에서 오는 실수를 줄일 수 있습니다.
- 재사용할 수 있습니다.
함수(Function) vs 메서드(Method)
- 함수는 클래스에 포함되지 않은 채로 사용됩니다.
- 함수명((인수1),(인수2)...)
- 메서드는 클래스에 포함되어 객체를 통해 호출됩니다.
- 객체.메서드명((인수1),(인수2))
함수의 정의(define)
함수는 미리 정의해둔 정의절을 실행해야 호출 가능합니다. 함수의 정의는 아래와 같은 형태로 작성할 수 있습니다.
### 예제
import random
def get_grade(score):
'''
숫자로 된 정수를 넣으시면 학점의 결과를 반환합니다.
'''
if 85 <= score <= 100:
return "A"
elif 70 <= score <= 84:
return "B"
elif 55 <= score <= 69:
return "C"
elif 40 <= score <= 54:
return "D"
elif 0 <= score <= 39:
return "F"
# 20명의 점수를 시스템에 입력
scores = [random.randint(1,100) for _ in range(20)]
scores = list(map(get_grade, scores))
print(scores)
함수의 정의 - 인자(parameter)
함수(또는 메서드) 정의에서 함수가 받을 수 있는 변수입니다. 함수인자 혹은 매개변수라고 부릅니다.
인자는 함수 정의절에서 소괄호 안에 정의됩니다. 아래와 같이 5가지 종류가 있습니다.
- 위치-키워드(positional or keyword) : 위치로 혹은 키워드로 전달될 수 있는 인자를 말합니다. 매개변수의 기본형태입니다.
- 위치 전용(positional-only) : / 문자를 기준으로 좌측에 위치한 인자를 말합니다.
- 키워드 전용(keyword-전용) : * 문자를 기준으로 우측에 위치한 인자를 말합니다.
- 가변 위치(var positional) : 위치 매개변수 외에 추가적은 위치 매개변수를 상관없이 받을 수 있습니다. 변수명 앞에 *를 하나 붙여 표기합니다.
- 가변 키워드(var keyword) : 키워드 매개변수 외에 추가적인 키워드 매개변수를 개수에 상관없이 받을 수 있습니다. 변수명 앞에 **를 두개 붙여 표기합니다.
# *args : var positional 가변 위치
def test_func(a, b, c, *args,):
print(f"a : {a} - b : {b} - c : {c}")
print(type(args))
print(args) test_func("a 위치입니다", "b 위치입니다", "c 위치입니다", "여기는", "어딜까요", "몇개", "더") # args는 튜플로 자동 패킹
# 결과값
# a : a 위치입니다 - b : b 위치입니다 - c : c 위치입니다 # <class 'tuple'>
# ('여기는', '어딜까요', '몇개', '더') # args 값을 튜플로 패킹해서 받는다.`
**kargs : var keyword 가변 키워드
def test_func(a = "a", b = "b", **kargs):
print(a,b) print(type(kargs)
print(kargs) test_func(1,2, key = 'value', key2 = 'value2')
# 결과값 # 1 2
# <class 'dict'>
# {'key': 'value', 'key2': 'value2'} # kargs 값을 딕셔너리로 패킹해서 받는다.`
def get_grade(score, student_number, name = '홍길동',):
'''
숫자로 된 정수를 넣으시면 학점의 결과를 반환합니다.
'''
print(f"{student_number} {name}의 성적을 확인합니다.")
if 85 <= score <= 100:
return "A"
elif 70 <= score <= 84:
return "B"
elif 55 <= score <= 69:
return "C"
elif 40 <= score <= 54:
return "D"
elif 0 <= score <= 39:
return "F"
get_grade(score = 30, student_number = '2015111498', name = '우상욱') # 키워드 방식으로 인자 받기/ 키워드로 찾을 때는 순서가 상관이 없다.
get_grade(30, '2015111498', '우상욱') # 위치 방식으로 인자 받기
#### 기본 형태는 위치 방식, 키워드 방식 둘 다 가능하다.
함수의 정의 - 디폴트
함수의 파라미터에 기본 값을 설정해주면, 값을 전달하지 않아도 기본 값으로 전달 됩니다.
print 문에서 sep = '\n'을 것을 생각해보면 쉽습니다.
기본값을 갖는 파라미터는 함수의 파라미터의 맨 뒤로 위치해야합니다.
def get_grade(score = 0):
'''
숫자로 된 정수를 넣으시면 학점의 결과를 반환합니다.
'''
if 85 <= score <= 100:
return "A"
elif 70 <= score <= 84:
return "B"
elif 55 <= score <= 69:
return "C"
elif 40 <= score <= 54:
return "D"
elif 0 <= score <= 39:
return "F"
예시
def string_line(str_value, /, str_len = 70, *, sep = "#"):
'''
str_value는 가운데 오는 텍스트입니다.
str_len은 텍스트의 설정할 길이입니다.
sep은 구분선을 그을 때 쓰는 문자입니다.
'''
print(str_value.center(str_len, sep))
# 여기서 파라미터 str_len은 과연 무엇일까
# 위치 방식(positional), 키워드 방식(keyword) 전부 가능하다.
# str_value 는 / 왼편에 오므로, 위치방식
# sep는 * 오른편에 오므로, 키워드 방식
string_line("구분", 50, sep = "*")
parameter vs arguments
- Parameters는 함수 정의부에서 사용하는 이름입니다.
- Arguments는 함수 호출할 때 함수에 전달하는 실제 값입니다.
ex) def greeting(name,age): # parameter print(name, age) greeting("파이썬", 32) # 함수 호출부에 위치한 Arguments`
문자열 메서드 join()
문자열(str) 클래스의 join 메서드는 문자열로 이뤄진 리스트를 하나의 문자열로 만듭니다.
리스트 내 요소인 문자열과 문자열 사이에 채울 문자 값. join(문자로 만들 리스트)와 같이 작성합니다.
list_strs = [_for _ in 'abcdefghijklmnop']
print(f"list_strs = {list_strs}")
# str.join(list)
# str 요소들로 이뤄진 list를 합쳐 하나의 문자열로 만듭니다.
whole_str = "*".join(list_strs)
print(f"\nwhole_str = {whole_str}")
함수 unpacking
x = 10
y = 4
def get_quotient_remainder(x, y):
return x // y, x % y
# return 부분이 , 로 찍어서 반환한 것 같지만, 실제로는 하나의 튜플로 반환
quitient, remainder = get_quotient_remainder(x, y)
print(quitient, remainder)
'데이터 분석 및 시각화 > 파이썬' 카테고리의 다른 글
[Python] 기초 정리(Class) (1) | 2023.01.13 |
---|---|
[Python] 기초 정리(전역변수, 지역변수, 람다(lambda)) (0) | 2023.01.13 |
[Python] 기초 정리(tuple, random, set) (0) | 2023.01.11 |
[Python] 메모리에 객체를 저장하는 구조 (0) | 2023.01.11 |
[Python] 기초 정리(dictionary, zip, list comprehension) (2) | 2023.01.10 |