2025-01-20T02:26:20

This commit is contained in:
2025-01-20 02:26:20 +09:00
parent 63d0b103bd
commit 9b77010fec
51 changed files with 3226 additions and 963 deletions

310
doc/06_function.md Normal file
View File

@@ -0,0 +1,310 @@
# 함수
파이썬 함수는 특정 작업을 수행하는 코드 블록으로, 코드의 재사용성을 높이고 가독성을 향상시키는 데 중요한 역할을 합니다. 함수를 사용하면 복잡한 문제를 작은 단위의 함수로 나누어 해결할 수 있으며, 코드의 유지보수성도 높일 수 있습니다.
## 함수의 특징
* 재사용성: 한 번 정의된 함수를 여러 번 호출하여 사용할 수 있습니다.
* 모듈화: 복잡한 프로그램을 작은 함수 단위로 나누어 관리하기 쉽습니다.
* 가독성: 코드의 가독성을 높여 유지보수를 용이하게 합니다.
## 함수의 종류
* 일반 함수: 특정 작업을 수행하는 일반적인 함수
* 람다 함수: 한 줄로 간결하게 표현되는 익명 함수
* 재귀 함수: 자기 자신을 호출하는 함수
## 함수의 정의
```python
def 함수명(매개변수1, 매개변수2, ...):
# 함수의 실행 코드
return 반환값
```
* def 키워드: 함수를 정의하는 시작
* 함수명: 함수를 호출할 때 사용하는 이름
* 매개변수: 함수에 전달되는 값을 받는 변수
* return: 함수의 결과값을 반환합니다. return 문이 없으면 None을 반환합니다.
## 함수의 호출
```python
함수명(인수1, 인수2, ...)
```
* 함수명: 정의된 함수의 이름
* 인수: 함수에 전달되는 실제 값
```python
def greet(name):
print(f"안녕하세요, {name}님!")
greet("홍길동") # 안녕하세요, 홍길동님! 출력
```
## 매개변수
### 기본값을 가지는 매개변수
```python
def greet(name, greeting="안녕하세요"):
print(f"{greeting}, {name}님!")
greet("홍길동") # 안녕하세요, 홍길동님! 출력
greet("이순신", "반갑습니다") # 반갑습니다, 이순신님! 출력
```
### 가변 인수
```python
def sum_numbers(*args):
total = 0
for num in args:
total += num
return total
result = sum_numbers(1, 2, 3, 4, 5)
print(result) # 15 출력
```
### 키워드 인수
```python
def print_info(name, age):
print(f"이름: {name}, 나이: {age}")
print_info(age=30, name="홍길동")
```
### 함수의 반환값
return 문을 사용하여 함수의 결과값을 반환합니다.
여러 값을 반환하려면 튜플을 사용합니다.
```python
def sum(arg1, arg2 = 0, *var_args):
s = arg1 + arg2
for i in var_args:
s += i
return s
sum(1, 2)
sum(arg1=1, arg2=2)
sum(1)
sum(1, 2, 3, 4, 5)
```
```python
# "/" 앞에 정의된 매개변수는 키워드 매개변수로 사용될 수 없습니다.
def func(arg1, arg2, "/", arg3):
return
```
```python
# 임의 길이 매개변수
def func(arg1, arg2, *varargs):
for v in varargs:
print(v)
return
```
```python
# 임의 길이 디워드 매개변수
def func(arg1, arg2, **kwargs):
for k,v in kwargs.items():
print ("{}:{}".format(k,v))
return
```
## 람다 함수
람다 함수는 파이썬에서 한 줄로 간결하게 정의할 수 있는 익명 함수입니다. 이름이 없기 때문에 람다 함수라고 불리며, 주로 간단한 연산이나 조건문을 표현할 때 사용됩니다.
특히, map, filter, sorted 등의 함수와 함께 사용하여 데이터를 처리하는 작업을 효율적으로 수행할 수 있습니다.
```python
lambda 매개변수1, 매개변수2, ... : 표현식
```
* lambda: 람다 함수를 정의하는 키워드입니다.
* 매개변수: 함수에 전달되는 값을 받는 변수입니다. 여러 개의 매개변수를 콤마로 구분하여 사용할 수 있습니다.
* 표현식: 함수가 반환할 값을 계산하는 표현식입니다. return 키워드를 생략하고 표현식만 작성합니다.
```python
square = lambda x: x**2
print(square(5)) # 25 출력
```
```python
# 두 수를 더하는 람다 함수
add = lambda x, y: x + y
result = add(3, 4)
print(result) # 출력: 7
```
```python
# 리스트의 각 요소를 제곱하는 람다 함수
numbers = [1, 2, 3, 4]
squares = list(map(lambda x: x**2, numbers))
print(squares) # 출력: [1, 4, 9, 16]
```
## 변수의 범위
* 전역 변수 : 함수 또는 블록의 외부에서 선언된 변수로써, 모든 곳에서 참조할 수 있습니다.
* 지역 변수 : 함수 또는 블록의 내부에서 선언된 변수로써, 함수 또는 블록의 내부에서만 유효합니다.
* nonlocal 변수 : 중첩된 함수에서 사용됩니다.
동일한 이름으로 선언된 전역 변수와 로컬 변수가 있을 때에는 로컬 변수가 우선합니다.
함수 내에서 전역 변수를 수정하려면 global 키워드를 사용해야 합니다. 하지만 전역 변수의 사용은 가급적 지양하고, 함수의 인자와 반환값을 통해 데이터를 주고받는 것이 좋습니다.
```python
x = 10
def change_global():
global x
x = 20
```
```python
def func1():
a = 1
def func2():
nonlocal a
a += 1
print(a)
print(a)
```
`globals()``locals()` 함수를 사용해서 선언된 변수를 조회할 수 있습니다.
```python
print(globals())
```
## 어노테이션
함수 어노테이션은 파이썬 함수의 매개변수와 반환값의 형태를 명시하는 기능입니다. 이는 코드의 가독성을 높이고, 개발자가 함수의 사용법을 더 쉽게 이해하도록 도와줍니다. 또한, 정적 타입 체커와 같은 도구를 사용하여 코드의 오류를 미리 발견하는 데 도움이 됩니다.
```python
def 함수명(매개변수1: 타입, 매개변수2: 타입, ...) -> 반환값의 타입:
# 함수의 본문
```
* 매개변수: 타입: 각 매개변수의 예상되는 타입을 지정합니다.
* -> 반환값의 타입: 함수가 반환할 값의 예상되는 타입을 지정합니다.
```python
def my_function_1(a: int, b: int):
c = a + b
return c
def my_function_2(a: int, b: int) -> int:
c = a + b
return c
def my_function_3(a: "A number", b: "Another number"):
c = a + b
return c
print(my_function_1.__annotations__)
```
### 어노테이션의 종류
* 기본 타입: int, float, str, bool 등
* 컨테이너 타입: list, tuple, dict 등
* 사용자 정의 타입: 클래스
* None: 반환값이 없음을 나타냄
* Any: 모든 타입 허용 (타입 검사를 생략하고 싶을 때 사용)
## 빌트인 함수
파이썬은 다양한 작업을 수행하기 위한 내장 함수를 풍부하게 제공합니다. 빌트인 함수는 별도의 모듈을 임포트하지 않고도 바로 사용할 수 있어 편리합니다. 이러한 함수들은 파이썬 프로그래밍의 기본적인 구성 요소이며, 효율적인 코드 작성에 필수적입니다.
### 데이터 형 변환
* bool : 값을 불리언 값(True 또는 False)으로 변환
* bytearray
* bytes
* complex
* dict
* float : 문자열 등을 실수로 변환
* frozenset
* int : 문자열 등을 정수로 변환
* list
* set
* str : 다른 자료형을 문자열로 변환
* tuple
* ascii
* bin
* chr, unichr
* hex
* oct
* ord
### 수학 연산
* abs : 절댓값
* divmod
* max : 최댓값
* min : 최솟값
* pow
* round : 반올림
* sum : 리스트나 튜플 요소의 합
### 반복
* enumerate : 시퀀스(문자열, 리스트, 튜플 등)의 인덱스와 값을 함께 반복
* iter, aiter
* next, anext
* range : 숫자의 연속된 시퀀스 생성
### 시퀀스
* filter
* len : 시퀀스(문자열, 리스트, 튜플 등)의 길이를 반환
* map
* reversed : 시퀀스의 요소 순서를 반대로 반환
* slice
* sorted : 시퀀스를 정렬하여 새로운 리스트를 반환
### 입출력
* input
* open
* print : 화면에 출력
### 객체
* classmethod
* dir : 객체가 가지고 있는 속성과 메서드를 리스트로 반환
* delattr
* getattr
* hasattr
* setattr
* property
* staticmethod
* super
* issubclass
### 그 외
* all
* any
* breakpoint
* callable
* compile
* eval
* exec
* format
* globals
* hash
* help : 함수나 모듈에 대한 도움말을 제공
* id : 객체의 고유 식별자
* isinstance : 인스턴스 확인
* locals
* memoryview
* object
* repr
* type : 자료형 확인
* vars
* zip
* \_\_import__
```python
# 데이터 형 변환
number_str = "123"
number = int(number_str) # number는 정수 123
print(type(number)) # <class 'int'>
# 수학 연산
numbers = [1, 2, 3, 4, 5]
print(sum(numbers)) # 15
# 반복
for i, value in enumerate(numbers):
print(i, value)
# 문자열 처리
text = "Hello, World!"
print(len(text)) # 13
print(text.upper()) # HELLO, WORLD!
```