파이썬 기초문법 02 - 함수, 지역변수와 전역변수

Lazyro-choi·2024년 3월 6일
0

파이썬 기초 문법

목록 보기
2/2


함수

  • 어떤 입력 값을 받아서 결과를 만들어 주는 것
  • 엑셀 함수를 생각하면 쉬움
  • 프로그래밍에서 함수란 특정 기능을 수행하는 코드
  • 엑셀에서는 이미 만들어진 함수를 주로 호출함
  • 파이썬(프로그래밍)에서는 필요한 함수를 프로그래머가 직접 개발할 수 있음.

파이썬에서 함수 만들기

  • 프로그래밍에서는 함수를 만드는 것을 = 함수를 정의한다 , 라고 표현함.
  • 파이썬 함수를 정의할 때 규칙
    • def 키워드를 사용하여 함수를 만들 수 있음.

    • 함수의 이름이 필요(변수 이름과 같은 규칙)

    • 함수의 입력이 있는 경우 입력 값들을 바인딩할 변수를 적어 줌

    • 들여쓰기 후 함수가 호출될 때 수행할 문장을 기술함.

      def 함수이름():
      	코드 
      
      def sum(A1, A2, A3): #첫째 값을 A1, 두번째는 A2 등 바인딩할 변수 = 인자값
      	코드 #앞에 들여쓰기 하고, 호출될 때 수행할 문장을 기술함. 

함수 정의

  • 함수 이름은 별찍기
    • 함수의 기능은 별을 출력
    • 함수 이름은 들여쓰기 된 코드를 바인딩
    • 그러니까 별찍기는 들여쓰기 된 코드들을 바인딩하게됨.

파이썬 변수와 함수의 차이점

  • 파이썬 변수는 값에 대한 이름표

    • 어떤 값이 자주 사용될 때 값에 이름표를 붙이는 개념임.
    • 변수는 값을 바인딩 함.
  • 파이썬 함수는 어떤 코드에 대한 이름표

    • 어떤 코드가 자주 사용될 때 코드에 이름표를 붙이는 개념.
    • 함수는 코드를 바인딩 함.

파이썬 함수 호출

  • 파이썬 함수의 이름은 코드 객체를 바인딩
  • 함수 이름이 바인딩하고 있는 코드를 수행하는 것을 함수 호출이라고 부름
  • 함수 호출 방법
    • 함수 이름()
    • 소괄호가 함수 호출을 의미함

함수 호출의 이해

  • 파이썬 코드는 기본적으로 위에서 아래로 순차적으로 실행 됨
  • 파이썬 인터프리터는 def 키워드를 만나면 코드를 메모리에 할당하고 이를 함수 이름이 바인딩
def mysum(a,b):
	ret = a+b
	return ret
  • 함수를 호출할 때, 정의에서 2개를 받기로 했으면 두개를 받아줘야 함.
  • mysum은 코드 객체를 바인딩하고 있음.
  • 하지만 메모리에 위치만 알고 있는 상태기 때문에, 내가 함수를 사용하기 위해 함수를 호출할 때는 인자값을 넣어줘서 불러내야함.

함수 호출의 이해(2)

  • 함수 이름에 ‘()’를 붙이면 해당 함수가 호출 됨
    • 함수의 호출이란 함수 이름이 가리키는 코드의 실행을 의미함
    • 인터프리터는 코드를 실행하기 위해 함수로 이동
def mysum(a,b):
	ret = a+b
	return ret

ret1 = mysum(3,4)
#ret1은 7이 되는거겠지? 

함수 호출의 이해(3)

  • 함수 호출의 1단계 : 입력 값 바인딩
    • 함수 정의부의 변수(파라미터)는 함수 호출부에 전달한 값(인자/Argument)를 바인딩한다.
    • a = 3, b =4
  • 함수 호출의 2단계 : 함수 실행
    • 함수 내에 들여쓰기 된 코드가 수행됨.
    • ret = a + b / 3+4 , 이제 ret는 7을 바인딩하게 됨.
  • 함수 호출의 3단계 : 결괏값 리턴
    • 함수 내에서 사용된 변수 소멸 / a,b,ret가 다 없어짐
    • 바인딩 되지 않은 객체(참조되지 않은 값)는 소멸됨.
    • 인터프리터는 함수 호출부로 돌아감.
    • 여기서 ret가 소멸되므로 mysum(3,4)는 7인데 왼쪽에 있던 ret1이 7이라는 값을 바인딩하게 됨.
    • 리턴이 되면서, 3과 4는 아무도 가리키지 않기 때문에 지워지게 되지만 7은 함수 바깥쪽에 있는 ret1이라는 변수가 가리키고 있기 때문에
    • 결과값은 계속 남아있게 되는 것!!
  • = 함수를 호출할 때 결과값을 바깥에서 바인딩 해주는 이유!

연습문제

num = 10

def foo()
	num = 20

foo()
print(num)
  • 다음 코드를 실행할 때 출력되는 값은?
    • 정답
      1. num은 10을 바인딩하게 됨.
      2. foo라는 함수는 들여쓰기 된 코드를 바인딩 하는 중
      3. foo() 인터프리터가 foo를 수행함. 이 때 num이 20을 가르키게 된다. 명시적으로 리턴하지 않았을 때 return none이 리턴됨.
        하지만! 이 num은 함수 foo안에서의 num이다. 인자값이 없으므로 foo()를 실행했을 때, return none이 되면서
        함수 내에 사용된 변수 소멸(num 소멸), 참조되지 않은 값도 소멸(20 소멸)
      4. 함수 foo() 호출이 끝나고, 여전히 함수 바깥에서 num은 10을 가리키고 있기에 print(num)은 10이다.

전역 변수와 지역 변수

  • 전역 변수
    • 함수 밖에서 정의한 변수
    • 특정 파이썬 파일에 정의된 변수 / 파일 단위로 계속 유지
  • 지역 변수
    • 함수 내에서 정의된 변수
    • 함수가 호출되는 그 순간에만 존재함
a = 10 # 전역 변수

def test():
	b = 20 # 지역 변수 / 함수 호출 끝나면 없어짐. 
	print(b)

test()

LEGB 규칙

  • LGEB 규칙(rule)
    - 파이썬에서 변수에 값을 바인딩하거나 변수를 참조할 때 LEGB 규칙을 따름.

    SCOPE설명
    locallocal의 약자로 함수 안을 의미한다.
    enclosingenclossed function locals의 약자로 내부 함수에서 자신의 외부 함수의 범위를 의미한다. 함수와 함수 사이
    globalglobal의 약자로 함수 바깥쪽을 의미한다.
    built-inbuilt-in의 약자로 open, range등과 같은 파이썬 내장 함수를 의미한다.

    [파이썬 강의 참고](https://youtu.be/jkwNBOyzSvQ?feature=shared)
    궁금하신 점은 댓글 달아주세요!
profile
모르면배우면되지.

0개의 댓글