TIL/Python

241119 인공지능을 위한 파이썬 - 3주차_1

beady 2024. 11. 19. 19:57

- 파이썬에서의 함수 : 미리 정의되어 있는 특정 작업을 수행하는 코드 블록
함수는 필요할 때마다 이름을 호출하여 코드 실행

함수는 입력값(매개변수)을 받아 처리하고, 결과값을 반환

 

- 함수의 사용처

1. 반복되는 코드의 재사용

2. 코드의 모듈화 - 각 함수의 독립적 사용 / 디버깅과 테스트가 쉬워짐

3. 복잡한 작업의 분할

 

- 함수의 장점

1. 코드 재사용성

2. 코드 가독성

3. 유지보수 용이성

4. 테스트 및 디버깅 용이성

 

※ 함수 사용 시 주의사항

1. 함수는 가능한 하나의 작업만 수행하도록 설계

2. 입력값(매개변수)의 수를 적절히 유지

3. 이름과 기능을 명확히 표현해야 함

4. 부작용을 최소화해야 함

 

 

- 파이썬 내장 함수

1. print() 함수 : 다양한 값을 받아 출력 가능
내부에 함수가 있으면 내부 함수 먼저 연산 후 print 함수로 값을 전달함

 

2. input() 함수 : 사용자로부터 값을 입력받음
어떠한 입력도 문자열로 돌려주기 때문에 적절한 데이터 변환이 필요

 

3. len() 함수 : 문자열, 리스트 등의 길이를 구함
컬렉션 형태의 데이터에도 대부분 사용 가능

 

4. type() 함수 : 변수나 값의 데이터 타입을 반환함
데이터 타입 확인 시 유용함

type(5) # int
type(3.14)  # float
type("beady") # str
type([1,2,3,4]) # list
type(print) # builtin_function_or_method

 

 

5. int(), float(), str() 함수 : 각각 정수, 실수, 문자열로 데이터 타입 변환 함수

 

6. sum() 함수 : 리스트나 튜플의 모든 요소 합 반환

 

7. min(), max() 함수 : 컬렉션에서 최소 or 최대값 반환

 

8. sorted() 함수 : 컬렉션 요소를 정렬해 새로운 리스트로 반환

number = [7, 2, 8, 6, 3]
sorted(number) # [2, 3, 6, 7, 8] (오름차순 정렬)
sorted(number, reverse=True) # [8, 7, 6, 3, 2] (내림차순 정렬)

number.sort()
number # [2, 3, 6, 7, 8] (number 자체의 요소 정렬)

 

 

9. abs() 함수 : 숫자의 절대값 반환

abs(-2) # 2
abs(-3.14) # 3.14

abs("-3.14") # error
abs(float("-3.14")) # 3.14

 

 

10. round() 함수 : 지정된 자릿수까지 반올림

 

- 내장 함수의 장점

1. 사용 편의성 - 이미 파이썬에 정의되어 있어서, 바로 사용이 가능

2. 안정성 - 이미 성능적으로 검증된 함수들

3. 코드 가독성 향상 - 명확하고 읽기 쉬워짐

 

 

- 함수 만들기

1. def : 파이썬에서 함수를 정의할 때 사용
함수 이름을 지정하고, 필요한 경우 매개변수 정의
필요한 작업 수행 후, 반환값 출력

def myfunction(first_number, second_number):
    first_number %= 2
    second_number %= 3
    print(first_number + second_number)
    return True
    
myfunction (4, 5)
# 2 (0 + 2)
# True

 

 

2. 매개변수 : 인수(arguments)를 처리하기 위해 사용하는 변수

매개변수는 함수를 정의할 때, arguments는 함수를 호출할 때 사용함

def add(a, b): # a와 b는 매개변수
    return a + b

result = add(4, 8) # 4와 8은 인수(arguments)
print(result)  # 12

 

 

3. 반환값 : 함수의 작업 완료 후, 호출된 위치로 돌려주는 값 / return 사용

def cube(n):
    return n * n * n

cube(5) # 125
# cube 함수는 입력값 n의 세제곱을 계산하고, 그 결과를 반환함

 

 

복수 반환값 : 여러 값을 반환 / 반환값은 튜플로 반환됨

def cube(a, b):
    return (a * a * a), (b * b * b)

cube(2, 3) # (8, 27) 튜플로 반환

 

 

반환값이 없는 함수 : return문을 생략하거나, 반환값 없이 return만 사용하면 None을 반환함

※ 함수는 입력값이 없을수도 있으며, 입/출력 값은 선택임

def test_function():
	return
    
print(test_function()) # None

 

 

4. 기본값 : 함수 정의 시, 매개변수에 미리 지정된 값 / 인수가 전달되지 않으면, 기본값이 사용됨

def greet(name="beady"): # name 매개변수의 기본값으로 "beady"를 가짐
    return f"안녕하세요, {name}님!"

print(greet())          # 안녕하세요, beady님!
print(greet("Alice"))   # 안녕하세요, Alice님!

 

 

다중 기본값 : 함수는 여러 매개변수에 대해 기본값을 가짐 / 항상 기본값이 있는 매개변수가 없는 매개변수 뒤에 와야 함

def greet(age, name="beady"): # name 매개변수의 기본값으로 "beady"를 가짐
    return f"안녕하세요, {name}님! {age}살 이시군요!"

print(greet(20))          # 안녕하세요, beady님! 20살이군요! (name 기본값 출력됨)
print(greet(20, "Alice"))   # 안녕하세요, Alice님! 20살이군요!

 

 

5. 가변 매개변수 : 정해지지 않은 개수의 인수를 받을수 있게 함

- arg : 임의의 위치 인수들을 튜플 형태로 받음

def test_add(*args): # 가변 인수 *args를 통해 임의의 개수의 숫자를 받아 모두 더함
    return sum(args)

test_add(1, 2, 3, 4) # 10

 

 

- kwargs : 키워드 인수들을 딕셔너리 형태로 받음

def test_greet(**kwargs):
    print(kwargs)
    
test_greet(name = "beady", age = 30) # {'name': 'beady', 'age': 30}

 

 

※ *args와 **kwargs를 함께 사용 시, *args를 먼저 **kwargs를 나중에 정의해야 함

def test_greet(a, b, *args, **kwargs):
    print(a, b)
    print(args)
    print(kwargs)
    
test_greet(10, 20, 30, 40, name = "beady", age = 30)
# 10 20 (a, b)
# (30, 40) (args)
# {'name': 'beady', 'age': 30} (kwargs)