Python

Python_03_함수

5_ssssseung 2021. 4. 5. 12:53

함수

  • 함수란 ?

    • 특정한 기능을 하는 코드 묶음
    • 가독성이 좋고, 재사용성 , 유지보수에 용이
    • 함수의 정의는 def func1(): 실행은 func1()
    • 빌트인 함수 : 파이썬 기본 내장 함수***

    https://user-images.githubusercontent.com/18046097/61181739-2984fd80-a665-11e9-991b-f2f058397a69.png

    • 함수의 리턴 : return을 해줘야 함 / 리턴없으면 타입이 None

1. 함수의 입력

  • 매개변수(parameter) : 함수 정의시 사용하고, 함수 내부에서만 사용됨

  • 인자(argument) : 함수 실행시 전달 인지로 사용, 함수의 입력값

    • 위치인자 : 기본적인 모습 cylinder(r,h) 일때, r과 h에 들어갈 값

    • 기본인자(Default Argument) : 아무것도 안넣어도 기본으로 정의된 인자값 def greeting2(name = '익명'): 호출인자가 없으면 디폴트가, 있으면 입력된 값이!

      • 단!!!! 기본인자 이후에 포지셔널인자를 사용할 수 없음!
      • 기본인자를 뒤쪽에 배치하거나, 모두 기본인자화 해줘야됨
      • 뭐가 기본인자인지 판단이 어렵기때문에 안그럼 오류
    • 키워드인자 : 직접 변수의 이름으로 특정인자를 전달

      • greeting(name = '길동', age = 1000)
      • 단!!!! 키워드 인자 사용 후 포지셔널 인자 사용 불가! 할거면 다해줘야함!
    • 가변(임의)인자: def students(*args) 몇개의 인자를 받을 지 모를 경우

      • 위 인자들은 튜플로 묶임
      • 가변인자 뒤에 포지셔널이 올 수 없음! 어디까지가 가변인지 알수 없기 때문!
      • 가변인자 다음에는 키워드인자로 사용 가능
      • 포지셔널인자 뒤에 가변인자 오는 건 상관없음!
    • 가변 키워드 인자 : def my_dict(**kwargs): / my_dict(한국어='안녕', 영어='hi', 독일어='Guten Tag')

      • 여러 값이 오고, 그 각각 인자들이 키워드 인자 형태로 받음
      • def example(text, *args, **kwargs): 이렇게 사용 가능!

2. 함수와 스코프

  • 스코프 코드 내부의 공간을 의미
  • 전역 스코프(global scope): 코드 어디에서든 참조할 수 있는 공간
  • 지역 스코프(local scope): 함수가 만든 스코프로 함수 내부에서만 참조할 수 있는 공간
  • 전역 변수(global variable): 전역 스코프에 정의된 변수
  • 지역 변수(local variable): 로컬 스코프에 정의된 변수

2.1 이름검색 규칙

LEGB Rule 이라고 부르며, 아래와 같은 순서로 이름을 찾아나갑니다.

  • Local scope: 정의된 함수 : 함수가 실행될 때만 변수가 살아 있음
  • Enclosed scope: 상위 함수 : 위와 같음
  • Global scope: 함수 밖의 변수 혹은 import된 모듈 : 모듈 호출된, 이름 선언 ~ 종료
  • Built-in scope: 파이썬안에 내장되어 있는 함수 또는 속성 : 파이썬 실행시

3. 재귀함수

자기 자신을 호출하는 함수, 리턴값으로 함수 자체를 넣어줌. 꼭 초기 값이 필요 안그럼 무한 루프

그걸 막기 위해서 최대 재귀루프 1000번이 설정되있음, 넘어가면 종료됨

def factorial(n):
    if n == 1:
        return 1 # base case
    else:
        return n * factorial(n-1)

def fib(n):
    if n < 2:
        return 1
    else:
        return fib(n-1) + fib(n-2)
  • 반복문과 재귀의 차이

    • 재귀로 쓰기 자연스러우면 재귀로 사용
    • 반복문에 비해 변수 사용을 줄일 수 있고
    • 함수의 가독성이 높음

'Python' 카테고리의 다른 글

Python_05_데이터_구조  (0) 2021.04.07
Python_04_예외처리  (0) 2021.04.06
Python_02_제어문  (0) 2021.04.04
Python_01_컨테이너  (0) 2021.03.30
Python_00_기초 문법  (0) 2021.03.26