오늘은 함수에 대해서 배웠다. 대표적인 내용으로 메서드 체이닝, 일급함수, 여러개의 값 반환하는 법, 재귀함수 등을 알아보았고 지금 부터 오늘 배운 내용을 적어보겠다.
앞서 코딩을 하면서 앞으로 많이 사용하는 datetime에 대해서 간략하게 적어보려고한다.
datetime.now()를 통하여 현재 년-월-일 을 불러 올 수 있고 이것을 가공하여 잘 활용한다면 앞으로 유용하게 사용할 것이다.
1. 메서드 체이닝
메서드 체이닝은 여러 메서드 호출을 연결하여 코드를 더 간결하고 읽기 쉽게 만드는 기술입니다. 한 객체의 메서드를 호출한 후 반환된 결과를 사용하여 다른 메서드를 계속 호출하는 방식으로, 코드를 간결하게 작성할 수 있습니다.
class 에 메서드 체이닝을 접목하여 작성한 코드
2. 일급 함수 (First-Class Function)
일급 함수 (First-Class Function)는 프로그래밍 언어가 함수 (또는 메서드)를 ‘일급 시민(값)'으로 취급하는 것을 의미합니다. 이는 함수를 다른 객체와 동일하게 취급하겠다는 것입니다.
2.1 함수를 변수에 할당할 수 있습니다.
Python에서 함수는 객체로써 존재하기 때문에, 함수를 변수에 할당할 수 있습니다. 이렇게 하면 해당 변수를 새로운 함수 이름처럼 사용할 수 있습니다.
변수 이름이 너무 길때 사용한다.
클래스의 메서드 또한 변수로서 관리될 수 있습니다.
2.2 함수를 데이터 구조에 저장할 수 있습니다.
함수를 리스트, 세트, 딕셔너리 등의 데이터 구조에 저장할 수 있습니다. 이를 통해 함수를 데이터처럼 유연하게 관리하고 조작할 수 있습니다.
2.3 함수를 인자로 다른 함수에 전달할 수 있습니다.
함수를 다른 함수의 매개변수로 전달할 수 있습니다. 이를 통해 코드의 유연성을 높일 수 있으며, 콜백 패턴 등 다양한 프로그래밍 패턴을 구현할 수 있습니다.
아래 예제는 원에 넓이를 구하는 예제입니다. 반지름의 제곱을 별도의 함수로 만들었으며, 함수를 아규먼트로 전달하여 사용하고 있습니다.
2.4 함수를 결과로서 반환할 수 있습니다.
함수 내부에서 새로운 함수를 정의하고 반환할 수 있습니다.
3.고차 함수란? (Higher-order functions)
고차 함수는 하나 이상의 함수를 인자로 받아들이거나 함수를 결과로 반환하는 함수입니다. 파이썬에서 함수는 객체로 취급되므로, 함수를 변수에 할당하거나 데이터 구조에 저장할 수 있고, 다른 함수의 인자로 전달하거나 반환할 수 있습니다. 고차 함수는 코드의 재사용성을 높이고, 코드를 더 깔끔하고 유연하게 만드는 데 도움이 됩니다.
3.1 함수를 아규먼트로 전달하기
다른 함수를 매개변수로 받아, 그 함수의 동작을 활용하는 방식입니다. 이렇게 하면 코드의 재사용성이 향상되고, 함수의 동작을 동적으로 변경할 수 있습니다.
3.2 함수를 반환값으로 사용하기
함수 내부에서 또 다른 함수를 정의하고, 이를 반환하여 동적으로 다양한 동작을 하는 함수를 생성할 수 있습니다.
4. 여러개의 값 반환
파이썬에서 함수는 여러 개의 값을 한 번에 반환할 수 있습니다. 이를 통해 함수에서 여러 결과를 쉽게 얻을 수 있습니다. 여러 값을 반환하려면, 그 값들을 쉼표로 구분하여 return 문에서 반환하면 됩니다. 반환된 값들은 튜플로 묶입니다. 이후 호출자는 이 튜플을 여러 개의 개별 변수에 분해하여 각 값을 개별적으로 접근할 수 있습니다.
아래는 두 숫자를 받아 그 합과 차를 반환하는 함수의 예시입니다.
5. 재귀함수
재귀함수는 함수 내부에서 자신을 다시 호출하여 작동하는 함수입니다. 이러한 방법으로 재귀함수는 반복적인 작업을 수행할 수 있습니다. 하지만 무한 반복을 피하기 위해 종료 조건이 필요합니다.
5.1 팩토리얼 함수
팩토리얼은 재귀함수로 간단하게 구현할 수 있는 좋은 예시입니다. 아래 함수는 n 팩토리얼을 계산합니다.
5.2 문자열 거꾸로 출력하기
재귀함수를 이용하여 문자열을 거꾸로 출력할 수 있습니다.
보통 hello 라는 문자열을 거꾸로 하기 위해서 우리는 'hello'[::-1] 이런 코드를 구사하지만 재귀함수를 통해서도 구현할 수 있다.
6. 배운내용 활용한 문제
문제 1번
문제 2번
'Python' 카테고리의 다른 글
2024.01.17 (수) 클로저, 데코레이터, 이터레이터, 제너레이터, args, kwargs, nonlocal (2) | 2024.01.17 |
---|---|
2024.01.15 (월) class 심화 (0) | 2024.01.15 |
2024.01.12 (금) class 심화, 크롤링, html (2) | 2024.01.12 |
2024.01.11 (목) map_filter_sorted_class (6) | 2024.01.11 |
2024.01.10 (수) while, break, continue, 클래스, 반복문 else (4) | 2024.01.10 |