네이버 부스트캠프 학습 정리/1주차

[Python] Function

AI쟁이J 2023. 3. 10. 10:33

파이썬에서 함수의 호출 방식

언어에서 함수가 호출을 받는 방식은 여러가지가 있다. 대표적으로는

 

● Call by Value

함수에 인자를 넘길 때 값만 넘기며 함수 내 인자 값 변경 시, 호출자에게 영향을 주지 않음

 

● Call by Reference

함수에 인자를 넘길 때 메모리 주소를 넘겨 함수 내 인자 값 변경 시, 호출자의 값도 변경됨

 

Python은 Call by Object Reference이다.

파이썬은 위 두가지 방식 모두 아닌 Call by Object Reference이다. 

이는 파이썬은 모든 것을 '객체'로 표현하기 때문이다.

 

객체란?

● 실제로 존재하는 모든 것

● 함수와 변수를 함께 묶는 방법의 하나

● 파이썬 내에서 객체를 사용하는 것이 가능하며 이를 파이썬이 객체지향적 언어라고 한다.

● 속성 (attribute) : 객체의 특징 또는 객체에 관해 알고 있는 사항으로, 객체 안에 포함된 변수(데이터)를 뜻함. 즉 Call by Value 에서의 Value

● 메서드 (method) :  속성 + 메서드(함수)로 클래스로부터 생성된 객체를 사용하는 방법으로서 객체에 명령을 내리는 메세

 

Call by Object Reference

Call by Value가 될 수도, Call by Object Reference가 될 수도 있는 방식.

 

파이썬의 자료형은

 

Immutable : 수정 가능한 객체로 int, float, str, tuple 타입이 있다.

Mutable : 수정 불가능한 객체로 list, dict 타입이 있다.

 

리스트가 수정 불가능?

- 리스트의 '값'을 수정하는 것이 불가능한게 아니라 리스트 속 객체의 주소 값이 변경이 되지 않는 것.

 

위 그림과 같이, 리스트의 속성을 변경해도 리스트a의 주소값은 같다.

 

여기서 Mutable 타입인 불변 타입의 객체를 넘기면 Call by Value로 동작하고, Immutable 타입의 객체를 넘기면 Call by Reference로 동작하는 방식이 Call by Object Reference 동작 방식이다.

Call by Value의 예

i 가 print_val의 인자로 넘겨졌을 때 i가 담고 있는 값인 10이 복사되어 함수로 넘겨졌으므로 함수 밖에서 i는 여전히 10이다.

 

Call by Refrence의 예씨로, print_ref 함수를 호출 뒤엔 i값이 실제로 바뀐다. 함수에 인자를 넘길 때 값을 복사한 것이 아니라 ref[0]을 통해 참조하고 있는 리스트의 주소를 넘겼기 때문에 함수 내에서 바뀌기 때문에 외부에서도 변경된다.

 

두 예시의 차이는 전자의 경우 immutable 타입인 int 타입을 넘겼기에 해당 변수가 참조하는 주소를 넘기지 않았고, 후자의 경우는 Mutable 타입의 list 변수를 넘겼기에 참조하는 주소를 넘겼기 때문이다.

 

Scoping Rule

변수가 사용되는 범위

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

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

 

Docstring

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

주로 함수명 아래에 세 개의 따옴표로 docstring 영역을 표시함.

'네이버 부스트캠프 학습 정리 > 1주차' 카테고리의 다른 글

1주차 회고  (1) 2023.03.12
[AI math] 벡터와 행렬  (0) 2023.03.11
[Python] arg/configparser  (0) 2023.03.11
[Python] OOP  (0) 2023.03.10
[Python] Pythonic Code  (0) 2023.03.10