BIG_PY
home
Introduce
home

7장 함수

7장 함수

1. 함수 정의

1️⃣
특정 기능을 반복해서 사용할 수 있는 코드의 묶음
•
내장 함수 print(), type()은 이미 사용 해봤음
#기본 구조 y = f(x)와 같이, 정의되는 구조에 대해 입력(x)과 출력(y)가 이루어짐 def 함수명([인자1, 인자2, ,,,, 인자n]): <code block> [return <반환 값>]
Python
복사
•
함수 기본구조 관련
1.
def 키워드로 시작
2.
프로그래머가 정의한 함수명을 입력 후 소괄호 및 콜론 사용
3.
들여쓰기 후 <코드블록>에 코드 입력
4.
반환 값이 있으면, 마지막 줄에 return <반환 값>을 입력(없으면 공백)
#ex1. 인자도 반환 값도 없는 함수 def my_func(): #인자가 없으므로 소괄호만 입력 print("My first funcion!") #들여쓰기 후 코드블록 입력 print('첫 번째 함수') #ex2. 인자는 있으나 반환 값이 없는 함수 def my_func(a): #인자가 한 개면 인자만 입력 b = a+10 print('결과:', b) #ex3. 인자도 있고 반환 값도 있는 함수 def my_func(a, b, c): #인자가 여러개면 콤마로 구분 d = a+b+c return d #반환값이 있으면 'return 반환값'으로 반환
Python
복사

인자도 없고, 반환 값도 없는 함수

def my_func(): print("My first function") print("This is a function")
Python
복사
•
반환 값이 없기 때문에, 실행하면 아무 일도 일어나지 않음
◦
아무일도 일어나지 않는 것 = 잘 정의된 것
•
이후 my_func()함수로 호출해야만 함수가 실행됨
my_func() #출력 My first function This is a function
Python
복사

인자는 있으나 반환 값이 없는 함수

def my_friend(name): print("{}는 나의 친구입니다..".format(name)) my_friend('동현') my_friend('마로') #출력 동현는 나의 친구입니다. 마로는 나의 친구입니다.
Python
복사
•
함수를 두 번 호출했는데 각각 인자를 다르게 입력 = 출력 결과가 다르게 나옴
•
함수에 인자를 이용하면 다른 결과를 얻을 수 있음
◦
함수 인자는 1개…n개일 수 있음.
[인자가 세 개인 함수]
def my_student_info(name, school_ID, phone_number): print("---------------") print("-이름:", name) print("-학번:", school_ID) print("-번호:", phone_number) #함수를 정의할 때 세 개의 인자를 넘겨받도록 만듬 #호출할 때도 세 개의 인자를 입력하여 호출 #호출 my_student_info("동현", "17", "010-2691-0695") my_student_info("마로", "23", "010-2222-3333") #출력 ------------------ -이름: 동현 -학번: 17 -번호: 010-2691-0695 ------------------ -이름: 마로 -학번: 23 -번호: 010-2222-3333 Q. 만약 함수 출력 양식을 '-'에서 '*'로 수정하고 싶다면? A. 앞에서 정의한 함수에서 수정하면 됨 def my_student_info(name, school_ID, phone_number): print("*****************") print("*이름:", name) print("*학번:", school_ID) print("*번호:", phone_number)
Python
복사

인자도 있고 반환 값도 있는 함수

def my_cal(x,y): z = x*y return z #반환 값이 있으므로 이를 반환하도록 함 #인자를 입력하여 함수 호출 my_cal(3,4) #출력 12
Python
복사

list, tuple을 인자로 갖는 함수

def my_student_info_list(student_info): print("*****************") print("*이름:", student_info[0]) print("*학번:", student_info[1]) print("*번호:", student_info[2]) print("*****************") #호출 student_info = ['마로', '17', '010-1111-2222'] my_studnet_info_list(student_info) ***************** *이름: 마로 *학번: 17 *번호: 010-1111-2222 *****************
Python
복사

변수의 유효 범위

💡
함수 안에서 정의한 변수는 함수 안에서만 사용할 수 있음
•
지역 변수(local variable) : 함수 안에서 정의한 변수
◦
함수 영역 안에서만 동작함
•
전역 변수(global variable) : 지역변수의 상대적 개념
◦
전역 변수는 코드 내 어디서나 사용 가능함
•
함수 내/외 정의 장소에 따라 코드의 유효 범위(scope)가 달라짐
◦
지역 영역(local scope): 지역 변수를 저장하는 이름 공간
◦
전역 영역(global scope): 전역 변수를 저장하는 이름 공간
•
내장 영역(built-in-scope) : 파이썬 자체에서 정의한 이름 공간
•
스코핑 룰(scoping rule) / LGB 룰(Local/Global/Built-in rule) : 구분
if 지역변수명 = 전역변수명일 경우 → 스코핑 룰에 따라 변수가 선택됨
a = 5 #함수 밖에서 정의된 전역 변수 a에는 5를 할당 def func1(): a = 1 #func1에서는 a에 1을 할당, func1에서만 사용 print("[func1] 지역 변수 a=", a) def func2(): a = 2 #func2에서는 a에 2를 할당, func2에서만 사용 print("[func2] 지역 변수 a=", a) def func3(): print("[func3] 전역 변수 a =", a) def func4(): global a #함수 내에서 전역 변수를 변경하기 위해 선언 a = 4 #전역 변수의 값 변경 print("[func4] 전역 변수 =", a) #호출 func1() #func1 호출 func2() #func2 호출 print("전역 변수 a=", a) #전역 변수 출력 #출력 [func1] 지역 변수 a= 1 [func2] 지역 변수 a= 2 전역 변수 a= 5
Python
복사
•
함수 안에서 정의된 지역 변수는 같은 이름의 전역 변수보다 먼저 참조됨(1호출 결과)
•
함수가 끝나면 그 효력이 즉시 사라짐(1 다음 2를 참조했을 때, 2의 지역변수값이 나옴)
•
함수를 호출하지 않고 변수를 이용하면 전역 변수를 참조(변수 a 호출 결과)
#global 함수를 통해, 전역 변수를 바꿀 수 있음 func3() func4() func3() #출력 [func3] 전역 변수 a= 5 [func4] 전역 변수 a= 4 [func3] 전역 변수 a= 4 #func4의 호출로 전역 변수 a의 값이 변경됨
Python
복사

lambda(람다) 함수

💡
한 줄로 함수를 표현하는 파이썬 용어로, 구성이 단순해 간단한 연산을 하는데 종종 사용됨
[람다의 기본구조] lambda <인자> : <인자 활용 수행 코드> #인자를 전달하면 코드를 수행한 후 결과를 바로 반환함 #인자는 콤마(,)로 구분해 여러 개를 사용할 수 있음 #람다를 사용할 때는, 함수 전체를 소괄호로 감싸고 별도의 소괄호에 인자를 씀 (lambda <인자> : <인자 활용 수행 코드>) (<인자>)
Python
복사
•
보통은 편리성을 위해 람다 함수를 다른 변수에 할당하고, 그 변수를 함수명처럼 이용해 람다 함수를 호출함
◦
이때, 정의한 인자도 함께 입력함
◦
람다 함수를 변수에 해당할 때는 함수 전체를 소괄호로 감싸지 않아도 됨
lambda_function = lambda <인자> : <인자수행활용코드> lambda_function(<인자>)
Python
복사

lambda의 활용

#ex1. lambda로 입력된 수의 제곱을 반환하는 코드 생성 (lambda x : x**2) (3) #출력 9 #ex2. lambda 함수를 변수에 할당한 후에 인자를 입력해서 호출 mySquare = lambda x : x**2 mySquare(2) #출력 4 #ex3. 다른 인자의 제곱 값을 얻고 싶다면?, 인자만 바꾸면 됨 mySquare(5) #출력 25 #ex4. 여러 개의 인자를 입력받아 연산 결과를 반환하는 람다 함수 mySimpleFunc = lambda x,y,z : 2*x + 3*y + z mySimpleFunc(1,2,3) #출력 11
Python
복사

유용한 내장 함수

💡
파이썬에 디폴트 값으로 존재하는 함수들

형 변환 함수

정수형으로 변환 = int()

#ex1. 소숫점형 변환 [int(0.123), int(3.512)] #출력 [0, 3] #정수형은 소수점 이하는 버림 #ex2. 문자열 변환 [int('1234'), int('5678')] #출력 [1234, 5678] #문자열을 정수로도 표현 가능함
Python
복사

문자형으로 변환 = str()

#ex1. 정수 데이터를 문자열 데이터로 [str(123), str(45678)] #출력 ['123', '45678'] #ex2. 실수 데이터를 문자열 데이터로 변환 [str(0.123), str(345.678)] #출력 ['0.123', '345.678']
Python
복사

리스트, 튜플, 세트형으로 변환

💡
기존 list, tuple, set의 성질에 상관 없이, 바꾸고 싶은 형 이름+()로 해당 코드를 감싸면 됨 = 원리가 단순하기에 아래의 내용으로 갈음

bool 함수

💡
내장함수 bool은 True, False결과를 반환 다양한 인자로 bool을 호출할 경우 어떠한 결과가 나오는지 확인

숫자를 인자로 bool 함수 호출

💡
숫자 0이면 false, 0이외의 숫자(실수 or 정수, 음수 or 양수 상관 없이)면 True
bool(0) False bool(1) True bool(-10) True bool(5.12) True
Python
복사

문자열을 인자로 bool 함수 호출

💡
함수 인자가 문자열인 경우, 문자열이 있으면 True를, 없으면 False를 반환
→ bool함수를 활용해 어떤 문자열이 빈 문자열인지, 아닌지 검사하는데 활용 가능
•
문자열에서 공백은 공백 문자열이 있는 것임
•
빈 문자열(’’)은 문자열이 없는 것
•
파이썬에서 None은 아무것도 없는 것으로 간주
bool('a') True bool(' ') True bool('') False bool(None) False
Python
복사

list, tuple, set를 인자로 bool 함수 호출

💡
문자열과 마찬가지로 항목이 있으면 Ture, 없으면 False를 반환
•
bool()함수는 각 항목이 있는지 검사할 때 유용하게 활용 가능함
list1 = [] #항목이 없는 리스트 bool(list1) #출력 False list2 = [1,2,3] #항목이 있는 리스트 bool(list2) #출력 True tuple1 = () #항목이 없는 튜플 bool(tuple1) #출력 False set1 = {} #항목이 없는 세트 bool(set1) #출력 False
Python
복사

bool 함수의 활용

def print_name(name): if bool(name): print('이름: ', name) else: print('입력된 이름이 없습니다.') print_name('james') #출력 이름: james print_name('') #출력 입력된 이름이 없습니다.
Python
복사

최솟값과 최댓값을 구하는 함수

•
최솟값 : min()
•
최댓값 : max()
◦
리스트, 튜플, 세트의 항목이나 문자열 중에서 각각 최솟값과 최댓값을 반환
ex1. 리스트에서 최솟값과 최댓값을 구하는 예 list1 = [1, 3, 5, 7, 9 ,99] [min(list1), max(list1)] #출력 [1, 99] ex2. 리스트 문자열에 대해서도 구할 수 있음 a-z순 str_list1 = 'abcah' [min(str_list1), max(str_list1)] #출력 ['a', 'z']
Python
복사
•
로마자 알파벳의 경우 A ~ Z, a~z순서대로 크기가 큼
•
문자열로 된 숫자와 로마자 알파벳을 비교했을 때 숫자가 더 작음

항목의 개수를 구하는 함수

💡
len()을 활용하여 구함