본문 바로가기
BoostCamp AI Tech - U Stage

BoostCamp AI Tech - Day02

by getamped 2021. 1. 19.

오늘은 강의 시간이 유난히 많았다. 그렇지만, 파이썬의 코어가 되는 부분이기에 강의를 유심히 들었다. 나머지는 다른 언어 공통이라 생략하겠다. 그 중에서 본인은 파이썬의 함수에 관해서 다뤄보고자 한다.

 

1. 파이썬의 함수의 특징

 

먼저, 함수에서 parameter를 전달하는 방식은 다음과 같다.

- 값에 의한 호출(Call by Value) : 함수에 인자를 넘길 때 값만 넘김, 함수 내에 인자 값 변경 시, 호출자에게 영향을 주지 않음

- 참조에 의한 호출(Call by Reference) : 함수에 인자를 넘길 때 메모리 주소를 넘김, 함수 내에 인자 값 변경 시, 호출자의 값도 변경됨

- 객체 참조에 의한 호출(Call by Object Reference) : 전달된 객체를 참조하여 변경 시 호출자에게 영향을 주지만, 새로운 객체를 만들 경우 호출자에게 영향을 주지 않는다.

 

파이썬은 Call by Object Reference라고 한다. 파이썬은 객체의 주소가 함수로 전달되기 때문이다. 그 예는 다음과 같다.

def spam(eggs):
    eggs.append(1) # 기존 객체의 주솟값에 [1] 추가
    eggs = [2,3] # 새로운 객체 생성
ham = [0]
spam(ham)
print(ham) # [0,1]

ham이 가리키는 주소가 있을 것이다. spam함수를 호출하면 이 때의 egg는 ham이 가리키는 주소와 동일하다. 그 다음에 append를 통해 원소 1을 추가하면 ham과 egg가 가리키는 값은 [0,1]이다. 그런데, 그 아랫줄에서 [2,3]이라는 새로운 객체를 생성했을 때, 그 객체의 주솟값이 할당된다. 또한, spam은 리턴값이 없고, ham은 여전히 [0,1]있는 주소를 가리키므로 최종 ham은 [0,1]이 나오게 되는 것이다.

 

2. 변수의 범위(Scoping Rule)

 

- 변수가 사용되는 범위 (함수 또는 메인 프로그램)

- 지역변수(local Variable) : 함수내에서만 사용

- 전역변수(Global variable) : 프로그램 전체에서 사용

def test(t):
	print(x)
	t=20
	print("In function :",t) # 이때의 t는 새로운 주솟값을 가짐

x=10
test(x)
'''
10
In function : 20
'''
print(t) # 전역변수 t가 없으므로 오류

전역 변수는 함수에서 사용가능하다. 그러나, 함수 내에 전역 변수와 같은 이름의 변수를 선언하면 새로운 지역 변수가 생김

 

def f():
    s="I love London!"
    print(s)
s = "I Love Paris!"
f()
print(s)
'''
"I love London!"
"I love Paris!"
'''

만약에 함수 내에서 전역 변수를 사용 하고 싶으면 global 키워드를 사용하면 된다.

def f():
    global s
    s="I love London!"
    print(s)
s = "I Love Paris!"
f()
print(s)
'''
"I love London!"
"I love London!"
'''

 

3. 재귀함수 (recursive Function)

 

- 자기 자신을 호출하는 함수

- 점화식과 같은 재귀적 수학 모형을 표현할 때 사용

- 재귀 종료 조건 존재, 종료 조건까지 함수 호출 반복

- 재귀 함수 예시

def factorial(n):
    if n==1:
    	return 1
    else:
    	return n*factorial(n-1)
print(factorial(int(input("Input Number for Factorial Calculation : "))))

# Input Number for Factorial Calculation : 5
# 120

 

4. function type hint

 

- 파이썬의 가장 큰 특징은 dynamic typing, 즉, 자료형을 유동적으로 할 수 있다는 것이다. 그러나, 처음 함수의 사용자가 interface를 알기 어렵다는 단점이 있다. 이러한 단점을 보완하기 위해 Python 3.5이후에는 PEP 484에 기반하여 type hints를 제공한다.

def (함수이름)(변수명 : 변수 타입)->(반환 타입):
	(함수 코드)
def type_hint_ex(name : str)->str:
	return f"Hello, {name}"

4.1 Type hints의 장점

- 사용자에게 인터페이스를 명확히 알려줄 수 있음

- 함수의 문서화할 때, parameter에 대한 정보가 명확함

- mypy 또는 IDE, linter 등을 통해 코드의 발생 가능한 오류를 사전에 확인

- 시스템 전체적인 안정성을 확보할 수 있다.

 

5. function docstring

 - 파이썬 함수에 대한 상세스펙을 사전에 작성하는 것이다.

- '''로 docstring 영역을 표시한다.

 

6. 함수는 언제 만들면 좋은가?

 

- 공통적으로 사용되는 코드는 함수로 변환

- 복잡한 수식,조건 -> 식별 가능한 이름의 함수로 변환

 

'BoostCamp AI Tech - U Stage' 카테고리의 다른 글

BoostCamp AI Tech - Day06  (0) 2021.01.25
BoostCamp AI Tech - Day05  (0) 2021.01.22
BoostCamp AI Tech - Day04  (0) 2021.01.21
BoostCamp AI Tech - Day03  (0) 2021.01.20
BoostCamp AI Tech - Day01  (0) 2021.01.18

댓글