BIG_PY
home
Introduce
home

7장 함수

7장 함수

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()을 활용하여 구함