고급 Python

본 토픽은 현재 준비중입니다. 공동공부에 참여하시면 완성 되었을 때 알려드립니다.

함수

개요

 일반적인 프로그래밍 언어에서 함수가 매개변수를 호출하는 방식에는 두가지가 있다.

  • Call by value (값 호출)
  • Call by reference (참조호출)

 하지만 Python은 이 두가지 방식을 혼합한 방식을 사용한다.

Call by object reference (객체호출)

 Python은 호출된 객체(파라미터, 인수)에 대한 변경이 있을 경우 즉, 값 추가(append) 연산에 대해서만 Call by reference로 동작한다.

def spam(eggs):
    eggs.append(1) # 기존 객체의 주소값을 참조하여 [1] 추가
    eggs = [2, 3]  # eggs는 새로운 객체 주소값 저장

ham = [0]
spam(ham)
print(ham)

 함수 안에서 append() 수행까지는 append 연산이므로 Call by reference에 의해 주소값이 공유되는 상황이고, ham, eggs 모두 같은 주소값을 가지고 있다. 고로 같은 객체인 것이다.

 이후 새 객체의 주소값을 저장하면서 기존 eggs 변수에 대한 주소값을 덮어쓴다. 하지만 함수 내부에서의 변수인 eggs를 덮어쓴 것이므로 함수 밖 ham의 값은 변경되지 않는다.

 객체에 대해서만 적용되며, 변수는 Call by value로 작동한다.

 즉, 함수 안에서 새로운 값을 할당하기 전까지는 기존 인수로 넘어온 객체의 주소값을 공유한다.

help()

 함수에 대한 설명문을 작성해두면 help() 함수로 이를 불러올 수 있다. 또는 __doc__ 변수를 읽어올 수 있다.

def calcsum(n):
    """1 ~ n까지의 합계를 구해 리턴한다."""
    sum = 0
    for i in range(n+1):
        sum += i
    return sum

help(calcsum)
print(calcsum.__doc__)
Help on function calcsum in module __main__:

calcsum(n)
    1 ~ n까지의 합계를 구해 리턴한다.

1 ~ n까지의 합계를 구해 리턴한다.

 

댓글

댓글 본문
버전 관리
Hyunseok Lim
현재 버전
선택 버전
graphittie 자세히 보기