728x90
반응형
•일급 함수
임의의 함수를 다른 변수들처럼 동일하게 사용(다루는)할 수 있는 것을 의미한다.
일급함수로 정의되기 위해서는 조건이 있는데 함수 안에 함수(변수처럼)를 선언할 수 있어야 한다.
인자(argument)를 함수로 전달할 수 있어야 한다. 그리고 반환되는 값이 함수여야 한다.
※ 인자(argument)와 매개변수(parameter)의 차이점
인자와 매개변수는 서로 비슷하면서 엄밀히 따지면 다르다. 그 차이점을 만드는 것이 쓰임새다.
함수 정의에 직접적으로 사용되는 변수를 매개변수, 실제 함수에서 넘겨주는 어떤 값을 인자라고 할 수 있다.
간단한 예시를 통해 보면 다음과 같다.
def anything(num1, num2): # 매개변수(Parameter)
print(num1+num2) # 결과창에서 확인하기 위한 출력
return num1 + num2 # 실제 반환되는 것
anything(10, 12) # (Argument)
22 |
다시 일급함수에 관한 이야기를 하면 아래와 같다.
# 일반적인 함수에 다른 함수의 주소를 전달하는 방식
def first(a, b):
return a**b # a의 b제곱
second = first # 주소 전달
print(first(5, 7))
print(second(5, 7))
# 함수 안에 함수를 선언 가능
print()
def third(func): # 편의상 func이라고 표현
def fourth():
print('Internal function') # 함수 안에 함수를 선언한 내부 함수
fourth()
return func # 매개변수
anything = third(first) # 반환값으로 함수를 사용
print(anything(5, 7)) # 인자값을 함수로 전달할 수 있다. 5, 7은 first에게 전달된다.
78125 78125 Internal function 78125 |
함수에 다른 함수를 선언(주소 전달)할 수 있다.
반응형
•축약 함수
축약 함수는 여러 줄을 사용하게되는 함수의 명령어를 한 줄로 요약해서 사용할 수 있는 방법이다.
파이썬에서는 lambda라는 함수로 구현할 수 있다.
주로 def를 사용할 정도로 복잡하지 않은 간단한 내용일 때 사용하거나 def(함수 선언)을 할 수 없는 상황에서 사용한다.
def Nsquare(x, y):
return x ** y
print(Nsquare(2, 3))
# 위 계산식을 축약 함수로 표현
print((lambda x, y : x ** y)(2,3))
# 축약 함수를 변수로 사용할 수도 있다.
var_1 = lambda x, y : x * y
print(var_1(3, 4))
8 8 12 |
또 람다는 초기값(가변 인수)을 지정해서 사용할 수 있다.
# 람다도 매개변수에 초기치(값) 사용가능, 가변 인수 지정
anything = lambda a, b = 10 : a + b
print(anything(10))
print(anything(20,6))
# 람다도 가변 인수 지정
anything_1 = lambda a, *b, **c : print(a, b, c) # 해당 표현에 관한 내용은 게시글 '추가 내용(1)' 참고
anything_1(1, 2, 3, m = '강아지', n = '고양이')
2022.10.25 - [파이썬] - 파이썬 - 함수 추가 내용(1)
20 26 1 (2, 3) {'m': '강아지', 'n': '고양이'} |
좀 더 길게 작성하면 다음과 같이 표현할 수 있다.
# 리스트에 복수의 람다를 넣고 사용 예제
# 일반적인 함수 작성
def anything_2(a, b):
num1 = a + b; num2 = a * b
li = [num1, num2]
return li
print(anything_2(3,4)[0])
print(anything_2(3,4)[1])
# 복수의 람다로 구현했을 경우
li = [lambda a, b : a + b, lambda a, b : a * b]
print(li[0](3, 4))
print(li[1](3, 4))
print()
# filter(조건 함수, 묶음형 자료(= 순회 가능한 데이터)) - 내장함수와 함께 사용도 가능하다.
print(list(filter(lambda a:a < 5, range(1, 11))))
print(list(filter(lambda a:a % 2, range(1, 11)))) # 참인 것만 출력
# 1 ~ 30 사이의 정수 중에서 5의 배수이거나 7의 배수인 숫자들 출력
print(list(filter(lambda a:a % 6 or a % 10, range(1, 31))))
728x90
반응형
'파이썬(Python)' 카테고리의 다른 글
파이썬 - 읽고 쓰기와 모듈(Module) (2) | 2023.01.19 |
---|---|
파이썬 - 함수 추가 내용(4)_Decorator & 재귀 함수 (0) | 2023.01.14 |
파이썬 - 함수 추가 내용(2) (0) | 2022.12.14 |
파이썬 - 함수 추가 내용(1) (1) | 2022.10.25 |
함수 내에서 변수의 생존 범위 (0) | 2021.06.16 |