[5일차] 함수
목차
1. 함수의 정의와 호출
2. 변수의 유효 범위
3. 람다(lambda) 함수
4. 유용한 내장 함수
1. 함수의 정의와 호출
1. 함수의 기본 구조
2. 인자도 반환 값도 없는 함수
def my_func():
print("My first function!")
print("This is a function.")
my_func()
>>> My first function!
>>> This is a function.
3. 인자는 있으나 반환 값이 없는 함수
: 함수명 다음의 괄호에 요구되는 인자값을 넣는다.
- 요구되는 인자값이 하나인 경우
def my_friend(friendName):
print("{}는 나의 친구입니다.".format(friendName))
my_friend("철수")
>>> 철수는 나의 친구입니다.
my_friend("영미")
>>> 영미는 나의 친구입니다.
- 요구되는 인자값이 둘 이상인 경우
: 인자를 모두 입력해야 한다. 하나라도 빠뜨려서는 안됨!
def my_student_info(name, school_ID, phoneNumber):
print("="*20)
print("- 학생이름:",name)
print("- 학급번호:", school_ID)
print("- 전화번호:", phoneNumber)
my_student_info("현아", "01", "01-234-5678")
>>> ====================
- 학생이름: 현아
- 학급번호: 01
- 전화번호: 01-234-5678
my_student_info("진수", "02", "01-987-6543")
>>> ====================
- 학생이름: 진수
- 학급번호: 02
- 전화번호: 01-987-6543
- 만약 함수가 재정의된다면, 함수를 이용한 앞선 코드들의 결과도 바뀌게 됨
def my_student_info(name, school_ID, phoneNumber):
print("*"*20)
print("* 학생이름:",name)
print("* 학급번호:", school_ID)
print("* 전화번호:", phoneNumber)
my_student_info("현아", "01", "01-234-5678")
>>> ********************
* 학생이름: 현아
* 학급번호: 01
* 전화번호: 01-234-5678
my_student_info("진수", "02", "01-987-6543")
>>> ********************
* 학생이름: 진수
* 학급번호: 02
* 전화번호: 01-987-6543
4. 인자도 있고 반환 값도 있는 함수
def my_calc(x,y):
z = x * y
return z
my_calc(3,4)
>>> 12
- 리스트를 인자로 갖는 함수
def my_student_info_list(student_info):
print("*"*25)
print("* 학생이름:", student_info[0])
print("* 학급번호:", student_info[1])
print("* 전화번호:", student_info[2])
print("*"*25)
#인자를 리스트로 입력해서 호출
student1_info=["현아","01","01-234-5678"]
my_student_info_list(student1_info)
>>> *************************
* 학생이름: 현아
* 학급번호: 01
* 전화번호: 01-234-5678
*************************
2. 변수의 유효 범위
1. 전역 변수와 지역변수
: 함수 안에서 정의한 변수는 함수 안에서만 사용할 수 있다.
a = 5 #전역 벽수
def func1():
a = 1 # 지역 변수. func1()에서만 사용
print("[func1] 지역 변수 a =",a)
def func2():
a = 2 # 지역 변수. func2()에서만 사용
print("[func2] 지역 변수 a =",a)
def func3():
print("[func3] 전역 변수 a =",a)
def func4():
global a # 함수 내에서 전역 변수 변경 위해 선언
a = 4 # 전역 변수의 값 변경
print("[func4] 전역 변수 a =",a)
- 지역변수 a
func1() #함수 func1() 호출
func2() #함수 func2() 호출
print("전역 변수 a =",a) #전역 변수 출력
>>> [func1] 지역 변수 a = 1
>>> [func2] 지역 변수 a = 2
>>> 전역 변수 a = 5
👀 func1(), func2()에서 정의된 지역변수 a는 각각의 함수에 따른 지역 변수를 정의한 것이다.
- 전역 변수를 변경하고 싶을 때는 선언하여 사용한다.
func3()
func4()
func3()
>>> [func3] 전역 변수 a = 5
>>> [func4] 전역 변수 a = 4
>>> [func3] 전역 변수 a = 4
👀 func4()의 경우, 앞서 선언된 전역변수는 global로 데려온 후 a를 4로 재정의하면서 전역변수 a의 값을 바꾼다.
따라서 그 다음으로 호출된 현재의 전역변수의 값을 나타내는 func3()의 결과도 바뀐다.
3. 람다(lambda) 함수
- 한줄로 함수를 표현
- 기본구조
- (lambda <인자> : <인자 활용 수행 코드>) (<인자>)
(lambda x : x**2) (4)
>>> 16
- 람다 함수를 변수에 할당한 후에 인자를 호출해서 사용
mySquare = lambda x : x**2
mySqaure(2)
>>> 4
mySqaure(5)
>>> 25
- 여러 개의 인자를 받아 사용하는 것도 가능
mySimpleFunc = lambda x,y,z : 2*x + 3*y + z
mySimpleFunc(1,2,3)
>>> 11
4. 유용한 내장 함수
1. 형 변환 함수
- int() 정수형으로 변환
- 소수점 이하는 버려짐
[int(0.123), int(3.5123456), int(-1.3257)]
>>> [0, 3, -1]
- 문자열을 정수형으로 변환
[int('1234'), int('5678'), int('-9012')]
>>> [1234, 5678, -9012]
- float() 실수형으로 변환
[float(0), float(123), float(-567)]
>>> [0.0, 123.0, -567.0]
- 문자열을 실수형으로 변환
[float('10'), float('0.123'), float('-567.89')]
>>> [10.0, 0.123, -567.89]
- str() 문자형으로 변환
[str(123), str(456789), str(-987)]
>>> ['123', '456789', '-987']
[str(0.123), str(345.678), str(-5.672)]
>>> ['0.123', '345.678', '-5.672']
- 리스트, 튜플, 세트형으로 변환
list_data = ['abc', 1, 2, 'def']
tuple_data = ('abc', 1, 2, 'def')
set_data = {'abc', 1, 2, 'def'}
[type(list_data),type(tuple_data), type(set_data)]
>>> [list, tuple, set]
- list() 리스트로 변환
print("리스트로 변환: ",list(tuple_data), list(set_data))
>>> 리스트로 변환: ['abc', 1, 2, 'def'] [1, 2, 'def', 'abc']
- tuple() 튜플로 변환
print("튜플로 변환: ",tuple(list_data), tuple(set_data))
>>> 튜플로 변환: ('abc', 1, 2, 'def') (1, 2, 'def', 'abc')
- set() 세트로 변환
print("세트로 변환: ",set(list_data), set(tuple_data))
>>> 세트로 변환: {1, 2, 'def', 'abc'} {1, 2, 'def', 'abc'}
👀set의 경우, 순서보다도 겹치지 않는 게 중요하다. 그래서 set의 구성요소의 순서는 기존에 입력한 것과 다를 수도 있다.
2. bool 함수
- 숫자를 인자로 bool 함수 호출
bool(0) # 인자 : 숫자 0
>>> False
bool(1) # 인자 : 양의 정수
>>> True
bool(-10) # 인자: 음의 정수
>>> True
bool (5.12) # 인자: 양의 실수
>>> True
bool (-3.25) # 인자: 음의 실수
>>> True
🤸🏻♀️bool은 숫자인 경우에, 0만 False이군!
- 문자열을 인자로 bool 함수 호출
bool('a') # 인자: 문자열 'a'
>>> True
bool(' ') # 인자: 빈 문자열(공백)
>>> True
bool('') # 인자: 문자열 없음
>>> False
bool(None) # 인자: 문자열 없음
>>> False
🤸🏻♀️bool은문자열인 경우에, 안에 문자열이 존재하지 않는다면 False이군!
그런데!! 빈 문자열, 즉 공백은 있다고 봐서 True!!
- 리스트, 튜플 세트를 인자로 bool 함수 호출
- 리스트를 인자로 bool 함수 호출
myFriends = []
bool(myFriends) # 항목이 없는 빈 리스트
>>> False
myFriends = ['James', 'Robert', 'Lisa', 'Mary']
bool(myFriends) # 인자: 항목이 있는 리스트
>>> True
- 튜플을 인자로 bool 함수 호출
myNum = ()
bool(myNum) # 인자: 항목이 없는 빈 튜플
>>> False
myNum = (1, 2, 3)
bool(myNum) # 인자: 항목이 있는 튜플
>>> True
- 세트를 인자로 bool 함수 호출
mySetA = {}
bool(mySetA) # 인자: 항목이 없는 빈 세트
>>> False
mySetA = {10, 20, 30}
bool(mySetA) # 인자: 항목이 있는 세트
>>> True
🤸🏻♀️bool은 리스트, 튜플, 세트에서 비어있다면 False
- bool 함수의 활용
def print_name(name):
if bool(name):
print("입력된 이름:", name)
else:
print("입력된 이름이 없습니다.")
print_name("James")
>>> 입력된 이름: James
print_name("")
>>> 입력된 이름이 없습니다.
3. 최솟값과 최댓값을 구하는 함수
- 리스트에서 활용
myNum = [10, 5, 12, 0,3.5, 99.5, 42]
[min(myNum), max(myNum)]
>>> [0, 99.5]
- 문자열에서 활용
myStr = "zxyabc"
[min(myStr),max(myStr)]
>>> ['a', 'z']
- 튜플에서 활용
myNum = (10, 5, 12, 0, 3.5, 99.5, 42)
[min(myNum),max(myNum)]
>>> [0, 99.5]
- 세트에서 활용
myNum = {"Abc", "abc", "bcd", "efg"}
[min(myNum),max(myNum)]
>>> ['Abc', 'efg']
4. 절댓값과 전체 합을 구하는 함수
- abs() 절댓값을 구하는 함수
[abs(10), abs(-10)]
>>> [10, 10]
[abs(2.45), abs(-2.45)]
>>> [2.45, 2.45]
- sum() 전체 합을 구하는 함수
sumList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sum(sumList)
>>> 55
5. 항목의 개수를 구하는 함수
len("ab cd") # 문자열
>>> 5
len([1, 2, 3, 4, 5, 6, 7, 8]) # 리스트
>>> 8
len((1, 2, 3, 4, 5)) # 튜플
>>> 5
len({'a', 'b', 'c', 'd'}) # 세트
>>> 4
len({1: "Thomas", 2: "Edward", 3: "Henry"}) #딕셔너리
>>> 3
6. 내장 함수의 활용
- 사용하지 않은 경우
scores = [90, 80, 95, 85] # 과목별 시험 점수
score_sum = 0 #총점 계산을 위한 초깃값 설정
subject_num = 0 #과목수 계산을 위한 초깃값 설정
for score in scores:
score_sum = score_sum + score #과목별 점수 모두 더하기
subject_num = subject_num + 1 #과목수 계산
average = score_sum / subject_num # 평균(총점 / 과목수) 구하기
print("총점:{0}, 평균:{1}".format(score_sum,average))
>>> 총점:350, 평균:87.5
- 사용했을 경우
scores = [90, 80, 95, 85] #과목별 시험 점수
print("총점{0}, 평균:{1}".format(sum(scores), sum(scores)/len(scores)))
>>> 총점350, 평균:87.5
print("최하 점수: {0}, 최고 점수:{1}".format(min(scores), max(scores)))
>>> 최하 점수: 80, 최고 점수:95