함수
일련의 코드 블록을 수행하고 값을 반환하는 코드 블록의 단위
- 내장함수
- 파이썬 인터프리터에 미리 정의되어 있고, import 구문 없이 바로 사용 가능
- 파이썬에 기본적으로 내장되어 있으므로 별도의 라이브러리 설치 필요 없음
- 수학 연산, 문자열 처리, 리스트/딕셔너리 조작, 파일 처리, 입출력 등 다양한 기능 제공
- 예) abs(), len(), print(), range()
- 공식 문서: https://docs.python.org/ko/3/library/functions.html
- 내장 함수 전부 보기:
- 외장함수
- 파이썬 모듈에서 제공하는 함수로 설치를 해야하며, 설치 후 해당 모듈을 불러와야 사용 가능함
- 대표적인 라이브러리로는 NumPy, Pandas, Matplotlib 등이 있음
- 내장함수보다 다양한 기능을 제공하며, 더 복잡한 기능을 구현할 수 있음
- 개발자가 직접 기능을 구현할 필요 없이 라이브러리에서 제공하는 함수를 사용 가능
연습문제
# 문제1 # 사용자로부터 두 정수 입력 받기 num1 = int(input("첫 번째 정수를 입력하세요: ")) num2 = int(input("두 번째 정수를 입력하세요: ")) # 두 정수의 차이의 절댓값 계산 difference = abs(num1 - num2) # 결과 출력 print(f"두 정수의 차이의 절댓값은 {difference}입니다.")
# 문제2 # 1부터 10까지의 정수 출력 for num in range(10, 31): print(num)
# 문제3 # 사용자로부터 문자열 입력 받기 input_string = input("문자열을 입력하세요: ") # 문자열의 길이 계산 length = len(input_string) # 결과 출력 print(f"입력한 문자열의 길이는 {length}입니다.")
# 문제4 # 1부터 5까지의 정수를 포함하는 리스트 생성 num_list = list(range(1, 6)) # 리스트 출력 print(num_list)
# 문제5 # 사용자로부터 3개의 정수 입력 받기 num1 = int(input("첫 번째 정수를 입력하세요: ")) num2 = int(input("두 번째 정수를 입력하세요: ")) num3 = int(input("세 번째 정수를 입력하세요: ")) # 튜플 생성 my_tuple = (num1, num2, num3) # 튜플 출력 print(f"생성한 튜플: {my_tuple}")
구조
def 함수이름(매개변수): 실행할 코드 return 반환값 print('hello')# return 값을 받고, 변수에 할당하면 그 값을 재사용할 수 있음. # return 유무에 따라 실행 결과가 달라짐. def adding(num1, num2): result = num1 + num2 return result # 만약 코드에서 제거하면 이 셀은 에러가 발생함. # 밖으로 꺼내주는 것이 없기 때문에 없을 경우 none값이 들어감 result1 = adding(20, 50) result2 = adding(200, 500) result3 = adding(2000, 5000) print(result1) print(result2) print(result3) print(result1 + result2 + result3)
문자열의 각 단어를 대문자로 변환하는 함수1
문자열 클래스와 method를 이용한 예시def capitalize_words(string): # 빈리스트, 어떠한 값을 넣겠다. new_list = [] # 띄어쓰기를 가지고 string 쪼개기 # 나눈 string을 str_list로 받기 str_list = string.split() # 처음에 hello가 들어가 for문 실행 # 두번째에 world가 들어가서 for문 실행 for word in str_list: # new_list 값을 result에 집어넣기 new_list.append(word.capitalize()) result = ' '.join(new_list) # 단어의 첫 글자 대문자로 변환 return result # 사용 예시 string1 = 'hello world' print(string1) print(capitalize_words(string1))
# 문제1 def calculate(num1, num2, operator): if operator == '+': return num1 + num2 elif operator == '-': return num1 - num2 elif operator == '*': return num1 * num2 elif operator == '/': return num1 / num2 else: return "잘못된 연산자 입력"
# 문제2 def calculate_sum(numbers): total = 0 for num in numbers: total += num return total
# 문제3 def split_string(input_string, separator): return input_string.split(separator)
# 문제4 def concatenate_strings(string1, string2): return string1 + string2
# 문제5 def power(base, exponent): result = 1 for _ in range(exponent): result *= base return result
# 문제6 def calculate_average(numbers): if not numbers: return 0 total = sum(numbers) return total / len(numbers)
# 문제7 def repeat_string(input_string, times): return input_string * times
# 문제8 def sort_list(numbers): return sorted(numbers)
람다 함수
- 이름 없이 정의된 작은 함수
- lambda 키워드를 사용하는 정의
- 간단한 로직을 수행하는 함수를 간결하게 작성할 때 유용
- 구조 :
lambda 매개변수 : 표현식
result = lambda num1, num2: num1 * num2 num1 = int(input("숫자1를 입력해주세요 : ")) num2 = int(input("숫자2를 입력해주세요 : ")) # 사용 예시 print(result(num1, num2))
max_num = lambda num1, num2 : num1 if num1 > num2 else num2 num1 = int(input("숫자1를 입력해주세요 : ")) num2 = int(input("숫자2를 입력해주세요 : ")) print(int(max_num(num1,num2)))
max_num = lambda n:max(num) num = list(map(int,input().split())) print('입력한 숫자',num) print('최대값 : ',max_num(num))
함수 map()
# 문제1) def calculate_squares(numbers): return list(map(lambda x: x ** 2, numbers)) user_input = input("숫자 리스트를 입력하세요 (공백으로 구분): ").split() numbers = list(map(int, user_input)) squared_numbers = calculate_squares(numbers) print("제곱 리스트:", squared_numbers)
# 문제2) def calculate_string_lengths(strings): return list(map(len, strings)) input_strings = input("문자열 리스트를 입력하세요 (공백으로 구분): ").split() lengths = calculate_string_lengths(input_strings) print("문자열 길이 리스트:", lengths)
# 문제3) def calculate_absolute_values(numbers): return list(map(abs, numbers)) user_input = input("숫자 리스트를 입력하세요 (공백으로 구분): ").split() numbers = list(map(int, user_input)) absolute_values = calculate_absolute_values(numbers) print("절대값 리스트:", absolute_values)
# 문제4) def capitalize_strings(strings): return list(map(str.upper, strings)) input_strings = input("문자열 리스트를 입력하세요 (공백으로 구분): ").split() capitalized_strings = capitalize_strings(input_strings) print("대문자로 변환된 문자열 리스트:", capitalized_strings)
# 문제5) def extract_even_numbers(numbers): return list(filter(lambda x: x % 2 == 0, numbers)) user_input = input("숫자 리스트를 입력하세요 (공백으로 구분): ").split() numbers = list(map(int, user_input)) even_numbers = extract_even_numbers(numbers) print("짝수 리스트:", even_numbers)
함수 filter()
# 예시2 - filter()을 이용하여 문자열 길이가 5 이상인 단어 필터링하기 # 문자열 리스트 words = ["apple", "banana", "cherry", "date", "elderberry", "fig"] # 길이가 5 이상인 단어 여부를 판단하는 함수 def is_long_word(word): return len(word) >= 5 # filter() 함수를 사용하여 길이가 5 이상인 단어만 추출 long_words = list(filter(is_long_word, words)) print(long_words) # 예시3 - 함수 filter()를 이용해 주어진 자료에서 소수 추출하기 # 소수: 1과 자신만으로 나누어 떨어지는 양의 정수 # 숫자 리스트 numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] # numbers = [i for i in range(1,301)] # list comprehension을 이용하여 1부터 300까지의 숫자를 리스트에 담으세요 # 소수 여부를 판단하는 함수 def is_prime(x): if x < 2: return False for i in range(2, int(x**0.5) + 1): if x % i == 0: return False return True # filter() 함수를 사용하여 소수만 추출 prime_numbers = list(filter(is_prime, numbers)) print(prime_numbers)