본문 바로가기

공부/python

(python) 함수3 - 인수, 파이썬의 객체, ID, 참조값

디폴트 인수

파이썬에서는 함수의 매개변수가 기본값을 가질 수 있다.

이것을 디폴트 인수(default argument)라고 한다.

greet()에는 항상 2개의 인수를 받아야하지만, 위의 예처럼 인수가 부족한 경우 기본값을

넣어주는 메카니즘이 바로 디폴트 인수이다.

 

위치 인수

파이썬에서 대부분의 인수들은 함수 호출 시에 위치에 의하여 구별된다.

하지만, 키워드 인수는 인수들 앞에 키워드를 두어서 인수들을 구별한다.

10은 매개변수 x로, 20은 매개변수 y로, 30은 매개변수 z로 전달된다.

 

키워드 인수

매개 변수의 이름에 값을 직접 대입하여 전달하는 것을 키워드 변수라고 한다.

 

위치 인수와 키워드 인수의 혼합

위치 인수와 키워드 인수를 같이 사용할 때는 반드시 위치 인수가 키워드 인수 앞에 나와야한다.

키워드 인수 다음에 위치 인수가 나오면 오류가 발생한다.

 

python의 객체 생성 및 id

python에서는 변수를 선언하면서 초기화하는 순간 객체가 메모리에 생성되고,

변수는 생성된 객체를 가리키는 역할을 한다.

생성된 객체마다 정체성(ID)를 가지고 있으며, 정체성을 확인하는 방법은

변수 x가 가리키는 객체는 id(x)이다.

 

변경 불가능한 객체

한번 생성된 객체의 값 변경이 불가능한 객체

  • 숫자
  • 문자열
  • 튜플(tuple)

변경 가능한 객체

한번 생성된 객체의 값 변경이 가능한 객체

  • 리스트(list)
  • 딕셔너리(dict)

변경 가능 객체와 변경 불가능 객체의 작동방식 차이

한번 생성된 객체의 값 변경은 불가능하므로 새로운 객체를 생성한다.

 

한번 생성된 객체의 값 변경이 가능하므로 기존 객체의 값도 변경된다.

 

참조값에 의한 인수 전달

함수를 호출할 때, 변수를 전달하는 경우가 많다.

내가 전달하는 변수의 무엇이 함수로 전달될까? 하는 의문이 생길 수도 있다.

거의 모든 현대적인 프로그래밍 언어에서는 혼란을 막기 위해서 변수의 값만이 전달된다.

이것이 값에 의한 호출이다.

  • 값에 의한 호출(call-by-value)처럼 작동하는 경우
     - 변경불가능 객체를 매개변수로 전달시
  • 참조에 의한 호출(call-by-reference)
     - 변경가능 객체를 매개변수로 전달시

값에 의한 호출 예

위의 코드에서 변수msg가 modify1()함수로 전달되었지만 msg의 값은 호출 후에도

변경되지 않았다. 이것이 값에 의한 호출이다. 정수도 동일하다.

 

참조에 의한 호출 예

리스트는 변경 가능한 객체로써 modify2()에 리스트를 전달한 후에 리스트의 내용을

변경하면 원본에 영향을 끼친다.

리스트의 경우에도 리스트의 참조값이 전달되며, 함수에서 참조값을 이용하여 리스트를

변경하면 리스트는 변경가능하기 때문에 새로운 객체를 생성하지 않고 기존의 객체가

변경되는 것이다. 매우 중요하다.

 

 

'공부 > python' 카테고리의 다른 글

(python) 함수5 - 관련예제들2  (0) 2019.10.20
(python) 함수4 - 지역 변수와 전역 변수  (0) 2019.10.20
(python) 함수2 - 관련예제들1  (0) 2019.10.20
(python) 함수1  (0) 2019.10.20
(python) 반복4 - 관련예제들2  (0) 2019.10.20