TIL - 46 python 복습 - 1

이동근·2021년 2월 10일
0

python

목록 보기
16/18

호출

파이썬에서 단순히 'def'로 정의해주었다고 해서 실행이 되는 것은 아닙니다. 함수가 실행이 될려면 호출 을 해주어야 합니다.

def로 이런 함수를 정의해 주었습니다. 이 함수는 총 3단계를 거쳐 호출이 됩니다.

  1. 함수 호출 단계
    cal_upper(10000) 함수를 호출했습니다. 그럼 price = 10000이 바인딩이 되고, 함수 호출 시 사용된 인자값은 컴퓨터 메모리의 어딘가에 할당이 됩니다.

  2. 함수 실행 단계

  • 이 단계 에서는 함수의 수행할 문장이 실행이 됩니다. 여기서는 'increment = price * 0.3', 'upper_price = price + increment' 입니다.
  • 여기서 중요한 점은 'price * 0.3'의 결과값이 메모리 어딘가에 실제로 위치한다는 점입니다. 그 다음 두번째 문장이 실행이되고, 그 값을 upper_price 변수가 가지게 됩니다. 물론 'price + increment' 역시 어딘가의 메모리에 할당이 된 상태 입니다.
  1. 함수 종료단계
  • 1단계와, 2단계에서 봤듯이 중간값들이 계속 메모리에 할당이 되어지는 것을 봤을 것입니다. 이런 과정이 지속적이게 된다면 언젠가는 시스템의 메모리들이 고갈되어져 시스템이 중지되거나, 느려지게 됩니다.
  • 이에 파이썬은 메모리관리 문제를 해결하기 위해 자동으로 메모리를 관리하는 매커니즘을 사용합니다. 함수의 호출이 종료가 되면 중간에 저장되었던 메모리들은 모두 삭제됩니다.

1,2,3번의 단계가 모두 완료가 되면 이미 함수의 호출이 종료가 됬기 때문에, 함수 내에서 사용된 모든 메모리가 삭제되었고, 따라서 함수 내부의 변수를 참조 할 수 없습니다.

그래서 함수 내부의 최종 결과값을 밖으로 보내주기 위해서 우리는 return을 사용합니다.


제대로 호출이 되어서 완료 되었다.

정의

입력값을 가지고 어떤 일을 수행한 다음에 그 결과물을 내어 놓는 것

함수를 사용하는 이유

  • 반복되는 부분이 있을 경우 그 구간을 함수로 정의해서 반복적인 작업을 줄여주기 위해서
  • 자신이 만든 프로그램을 함수화 하면 그 프로그램의 흐름을 일목요연하게 볼 수 있기 때문이다.

구조

  • 'def' 함수를 만들 때 사용하는 예약어 함수 이름은 함수를 만드는 사람이 임의로 만들 수 있따. 이름 뒤 괄호 안의 매개 변수는 함수에 입력으로 전달 되는 값을 받는다.

매개변수(parameter) vs 인수(arguments)

  • 매개변수 : 함수에 입력으로 전달된 값을 받는 변수
  • 인수 : 함수를 호출 할 때 전달하는 입력값을 의미한다.

범위(scope)

프로그래밍 언어에서 scope는 어떠한 객체가 유효한 범위를 이야기 한다.

  • local Scope : 함수 내부에서 선언한 객체, 그 함수에서만 사용가능
  • Enclosing Scope : 중첩 함수에서 선언, 그 중첩함수 내에서만 가능
  • Module Scope(global) : 함수 밖에서 선언된 변수나 함수를 이야기 한다.
  • Builtin Scope : 파이썬안에 내장되어 있는, 파이썬이 제공하는 함수 또는 속성 들이 가지고 있다.

위치인수

함수에 인수를 넣는 순서를 의미한다.

언패킹

리스트나 튜플 같은 반복 가능한 객체는 언패킹하여 인수를 넣을 수 있다.
(단!, 정의된 인수의 갯수가 동일해야한다.)

가변인수

함수를 처리할때 있어 인수의 갯수를 유연하게 처리할수 있다. '*'를 사용해서 정의하며, 인수의 이름은 자유롭게 할 수 있지만 관례적으로 argument의 줄임말 args를 사용한다.

고정인수와 가변인수를 같이 사용할 때에는, 고정인수가 먼저 정의 되어야 한다.

키워드 인수

함수를 호출 할 때 정의된 인수의 값을 할당하여 호출하는 방식

가변 키워드 인수

함수를 정의할때 인수의 갯수를 유연하게 처리 가능하다. **kwargs로 표현 가능하다.

가변인수와, 가변 키워드 인수를 동시에 다 사용하고 싶을 경우
고정인수 -> 가변인수 -> 가변키워드 인수의 순으로 정의가 되어야 한다. 섞이게 되면 Syntax Error가 일어난다.

파라미터에 기본값을 정해줄 경우에 일반 인수들 보다 뒤에 정의되어야하고, 가변인수보다는 뒤에 정의 될 수 있지만 가변키워드인수 보다는 앞에 정의되어야 한다.

가변인수
가변인수, 위치인수의 순서

class 와 instance의 차이점

클래스, 인스턴스, 인스턴스 메소드
클래스 메소드, 정적 메소드

profile
하루하루 1cm 자라는 개발자

0개의 댓글