Search

함수

대분류
언어
소분류
Python
유형
함수 구조
파라미터
람다
클로저
콜백
이터레이터
제너레이터
주요 레퍼런스
https://nirsa.tistory.com/118
최종 편집 일시
2024/10/27 15:35
생성 일시
2024/07/08 09:54
14 more properties

함수(Function) 정의

입력 → 출력
입력 변수 (파라미터) : 함수에 입력하는 변수
출력 변수 (리턴 값) : 함수 결과

함수 구조

def 함수명(파라미터): 수행 코드 return 출력변수
Python
복사

변수 사용범위(Scope)

지역변수(local) : 함수 내부에서 만들어진 지역변수는 함수 내에서만 사용 가능 (파라미터 포함)
전역변수(global) : 함수 밖에서 만들어진 변수 (어디서든 사용 가능)

디폴트 파라미터

파라미터에 값을 넣지 않았을 떄 기본 적용되는 값
def 함수명(파라미터1=1, 파라미터2=2): return 파라미터1 + 파라미터2
Python
복사
디폴트 파라미터에는 None을 사용할 수 있음.
디폴트 파라미터는 다른 파라미터보다 나중에 넣어줘야 함.

람다 함수

한 줄짜리 간단한 함수를 만들 때 사용
1회용 함수를 만들 때 많이 사용 (== 화살표 함수)
예제
square_lambda = lambda x:x**2 square_lambda(3) make_even = lambda x: [i for i in x if i%2 == 0] make_even([1, 2, 3, 4, 5, 6, 7, 8])
Python
복사

클로져(Closure)

내부 함수(중첩 함수)
지역변수를 기억하다가 내부 함수를 실행할 떄 기억한 지역 변수 처리
반환된 내부함수가 자신이 선언되었을 때의 환경을 기억하고, 외부함수 밖에서 호출되더라도 그 환경에 다시 접근할 수 있는 함수
클로저의 조건
내부 함수
외부 함수의 지역 변수를 참조
외부 함수가 내부 함수를 Return
def func_out(out_param): a = 10 def func_in(): # 조건1 : 내부함수 return a + out_param # 조건2 : 외부 함수(func_out)의 지역변수(a)를 참조 return func_in # 조건 3 : 외부 함수(func_out)가 내부 함수(func_in)를 Return
Python
복사

콜백함수(Callback Function)

함수의 인자로 사용되는 함수
def callFunc(a, func): # func : 콜백함수 return func(a)
Python
복사

Decorate

코드를 변경하지 않고 기능을 추가하거나 수정하고 싶을 때 정의하는 표현식
클로져와 유사
호출할 함수명 앞에 @로 표현
여러 데코레이터 함수 동시 지정 가능
내부 함수의 주소를 리턴하고 함수를 다른 함수의 인자로 전달
def decorator_func(org_func): # 함수를 인자로 받는다. def wrapper_func(): # 내부함수를 구현한다. print("org_func 가 실행 되기전 입니다.") org_func() # org_func 함수를 실행 return wrapper_func # 내부함수의 주소를 반환 @decorator_func def do_func(): print("original 함수가 실행 되었습니다.")
Python
복사

이터레이터(Iterator)

반복 구문을 적용할 수 있는 리스트와 같은 객체
반복 가능(iterable) 객체
리스트, 튜플, 딕셔너리, 집합 등이 존재
반복이 가능하다면 iter() 함수를 이용하여 iterator로 만들 수 있음.
# 이터레이터를 확인하기 위해 간단한 리스트 생성 test = [10, 20, 30] # __iter__() 메서드를 사용하여 이터레이터를 쓸 수 있도록 설정 test_iter = iter(test) # 또는 test_iter = test.__iter__() # __next__() 메서드를 사용하여 요소를 하나씩 불러옴 print(test_iter.__next__()) print(test_iter.__next__()) print(test_iter.__next__()) print(test_iter.__next__()) # 결과값 : 10 # 결과값 : 20 # 결과값 : 30 # 결과값 : StopIteration 에러 발생
Python
복사

제너레이터(generator)

이터레이터를 생성해 주는 함수
제너레이터로 생성한 객체는 이터레이터와 마찬가지로 next()함수 호출 시 값을 차례대로 얻을 수 있음.
결과 반환을 할 때 return 대신 yield 키워드를 사용
메모리 적재 방식 <=> 일반 함수
제너레이터 함수는 값을 한꺼번에 모두 생성하지 않고, 필요할 때마다 하나씩 생성하는 "지연 평가(lazy evaluation)" 방식으로 작동
제너레이터는 값 하나를 생성하고 반환할 때마다 메모리에 해당 값만 저장합니다. 즉, 모든 값을 한꺼번에 메모리에 적재하지 않는다.
필요할 때마다 값을 생성하므로 메모리 사용이 최소화된다.
import time def gen(count): start = 1 while start <= count: yield start # yield를 사용하여 start를 반환 # 1을 실행한 후부터 time.sleep(2)를 실행 time.sleep(2) # yield start 실행 후 2초간 대기 start += 1 for i in gen(3): print(i)
Python
복사
대규모 데이터 처리 예제
def read_large_file(file_path): with open(file_path, 'r') as file: for line in file: yield line for line in read_large_file('large_file.txt'): process(line) # 라인을 처리하는 사용자 정의 함수
Python
복사
read_large_file 함수는 파일을 한 줄씩 읽어 yield로 반환
해당 방식은 파일 전체를 메모리에 적재하지 않고, 한 줄씩 읽고 처리하기 때문에 메모리 사용량을 크게 줄일 수 있다.