def swap_value(x, y):
temp = x # 값이 복사되어 함수로 전달됨 -> 호출자에게 영향을 주지 않음
x = y
y = temp
x = 4
y = 5
swap_value(x, y)
print(x, y) # 4 5
참조에 의한 호출 call by reference
함수에 인자를 넘길 때 메모리 주소가 함수로 전달되는 방식
→ 함수 내에 인자 값 변경 시, 호출자의 값도 변경됨
객체 참조에 의한 호출 call by object reference
파이썬의 함수에서 parameter을 전달하는 방식
함수에 인자를 넘길 때 객체의 주소가 함수로 전달되는 방식
→ 전달된 객체를 참조하여 변경이 이루어지는 경우 호출자에게 영향을 주지만, 새로운 객체를 생성하는 경우 호출자는 영향을 받지 않음
def spam(eggs):
eggs.append(1) # 전달된 객체(eggs)를 참조한 변경이 이루어짐 -> 호출자에게 영향을 줌
eggs = [2, 3] # 새로운 객체를 생성 -> 호출자에게 영향을 주지 않음
ham = [0]
spam(ham)
print(ham) # [0, 1]
02 Scoping Rule
변수가 사용되는 범위에 따른 변수의 구분
지역변수 (local variable): 함수 내에서만 사용
전역변수 (global variable): 프로그램 전체에서 사용
def f_1():
s = "I love spring" # s: 지역변수
print(s)
def f_2():
global s # global을 통해 전역변수 s를 함수 내에서 사용
s = "I love spring"
print(s)
s = "I love summer" # s: 전역변수
f_1() # I love spring
print(s) # I love summer
f_2() # I love spring
print(s) # I love spring
전역변수는 global 키워드를 사용하여 함수 내에서 사용할 수 있음
하지만, 함수 내에서 전역 변수와 같은 이름의 변수를 선언하면 그 변수는 새로운 지역 변수가 됨
03 Recursive Functions
재귀함수 (recursive function)
자기 자신을 호출하는 함수
점화식 등의 재귀적 수학 모형을 표현할 때 사용
재귀 종료 조건을 설정하여 종료 조건까지 함수가 반복적으로 호출되게 함
04 Function Type Hints
파이썬의 가장 큰 특징은 dynamic typed lauguage라는 점인데, 함수를 처음 사용하는 사용자는 이러한 특징으로 인하여 함수의 interface를 알기 어렵다는 단점을 가진다
→ 이에 따라 python 3.5 버전 이후로는 PEP 484에 기반하여 type hints 기능을 제공하고 있다
type hints
코드 작성 시에 변수의 데이터 타입을 알려주는 것
def function_name(var_name: var_type) -> return_type:
pass
# var_type: parameter의 data type을 알려줌
# return_type: 반환값의 data type을 알려줌
type hints의 장점
사용자에게 인터페이스를 명확하게 알려줄 수 있다
함수를 문서화할 때 parameter에 대한 정보를 명확하게 알 수 있다
mypy 또는 IDE, linter 등을 통해 코드의 발생 가능한 오류를 사전에 확인할 수 있다
시스템의 전체적인 안정성을 확보할 수 있다
05 Docstring
docstring
함수, 모듈, 클래스 또는 메소드 정의의 첫 번째 명령문으로 발생하는 문자열
함수, 모듈, 클래스 또는 메소드에 대한 상세한 정보를 제공함으로써 함수 사용자의 이행도를 높임
docstring의 기본 형태
def calculate_rectangle_area(x, y):
"""_summary_ # 함수의 기능
Args: # 인자
x (_type_): _description_
y (_type_): _description_
Returns: # 반환값
_type_: _description_
"""
return x * y
cf. vscode의 autoDocstring - Python Docstring Generator을 사용하면 더욱 편리하게 docstring을 작성할 수 있다 !
댓글