2025-01-20T02:26:20
This commit is contained in:
310
doc/06_function.md
Normal file
310
doc/06_function.md
Normal 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!
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user