학습내용
#1 : 함수(function)란 무엇인가?
입력값을 가지고 어떤 일을 수행한 다음에 그 결과물을 출력하는 것이 함수가 하는 일이다.
※ 함수를 사용하는 이유
- 똑같은 내용의 반복을 피할 수 있다.
- 프로그램을 함수화 했을 때 프로그램의 흐름 파악 용이.
- 프로그램의 파악이 용이하다는 것은 프로그램을 논리적으로 잘 짰다는 의미이며, 이는 단순한 코드의 흐름(명령어의 나열)이 아니라 사람들이 봤을 때 이해가 되는 것.
- 함수를 호출함으로써 세세한 코드를 보지 않아도 기능을 이해할 수 있도록.
#2 : 파이썬 함수의 구조
def는 함수를 만들 때 사용하는 예약어이며, 함수 이름은 임의 설정이 가능. 함수 이름 뒤 괄호 안의 매개변수는 이 함수에 입력으로 전달되는 값을 받는 변수이다. 함수를 정의한 다음 조건문, 반복문 처럼 수행할 문장을 입력.
#함수 구조
def 함수명(매개변수):
수행할 문장1
수행할 문장2
...
#예시
def sub(a,b):
return a - b
sub(1,2)
#-1
a = 10
b = 9
c = sub(a,b)
print(c)
#1
ten = 10
five = 5
x = sub(ten, five)
print(x)
#5
- 함수 이름 : sub
- 입력값 : a, b
- return : 함수의 결과값 반환 / return은 분기 하나당 하나만 사용.
#3 : 매개변수(parameter)와 인수(arguments)
매개변수는 함수에 입력으로 전달된 값을 받는 변수를 의미하고, 인수는 함수를 호출할 때 전달하는 입력값을 의미한다.
def sub(a,b): #a,b: 매개변수
return a - b
print(sub(1,2)) #1, 2: 인수
- a, b : 매개변수
- 1, 2 : 인수
#4 : 함수의 4가지 형태
1) 일반적인 함수 : 결과값을 받을 변수 = 함수이름(입력인수1, 입력인수2, ...)
def sub(a,b):
result = a - b
return result
a = sub(100, 90)
print(a)
#10
2) 입력값이 없는 함수 : 결과값을 받을 변수 = 함수이름( )
def name():
return 'def'
a = name()
print(a)
#def
3) 결과값이 없는 함수 : 함수이름(입력인수1, 입력인수2, ...)
def sub(a,b):
print("%d, %d의 차이는 %d 입니다." %(a,b,a-b))
a = sub(100,90)
print(a)
# 100, 90의 차이는 10 입니다.
# None
4) 입력값도, 결과값도 없는 함수 : 함수이름( )
def name():
print('def')
a = name()
print(a)
# def
# None
#5 : 매개변수 지정하여 호출하기
함수를 호출할 때 매개변수를 지정할 수도 있다. 매개변수를 지정해주면 순서와 상관없이 똑같은 결과값이 나온다.
def sub(a,b):
return a - b
result = sub(a=100, b=90)
print(result)
#10
def sub(a,b):
return a - b
result = sub(b=90, a=100)
print(result)
#10
#6 : 입력값의 개수를 모르는 경우
일반적으로 볼 수 있는 함수 형태에서 괄호 안의 매개변수 부분을 *매개변수로 작성한다. *매개변수로 작성하면 매개변수 개수와 상관없이 매개변수를 보낼 수 있다.
1) 기본 구조와 예시1
#구조
def 함수이름(*매개변수):
수행할 문장
...
#예시
def add(*args):
result = 0
for i in args:
result = result + i
return result
result = add(1,10,100,1000)
print(result)
#1111
print(add(1,10,100,1000,10000,100000,1000000))
#1111111
2) 예시 2
def add_mul(sel, *args):
if sel == 'add':
result = 0
for i in args:
result = result + i
elif sel == 'mul':
result = 1
for i in args:
result = result * i
return result
result = add_mul('add', 1,10,100,1000)
print(result)
#1111
result = add_mul('mul', 1,10,100)
print(result)
#1000
- *가 붙지 않은 매개변수는 필수, *가 붙은 매개변수는 자유롭게.
#7 : 키워드 파라미터 kwargs
키워드 파라미터를 사용할 때는 매개변수 앞에 별 두 개(**)를 붙인다. 매개변수 앞에 **을 붙이면 매개변수는 딕셔너리가 되고 모든 key = value 형태의 결과값이 그 딕셔너리에 저장된다. key 값은 문자열 형태로 저장된다.
def print_kwargs(**kwargs):
print(kwargs)
print_kwargs(a=1)
#{'a': 1}
print_kwargs(name='python', year = 2021)
#{'name': 'python', 'year': 2021}
def dict(**a):
print(a)
dict(b=1)
#{'b': 1}
#8 : 함수의 결과값은 하나
함수의 결과값은 하나이다. 하지만, 파이썬에서 return을 여러개하면 결과값이 하나의 객체인 tuple로 묶인다. 따라서 tuple 안에 여러 결과값이 담길 수 있으며, 이를 활용해서 여러개의 결과값을 출력할 수 있다.
def add_mul(a, b):
return a+b, a*b
result = add_mul(10,100)
print(result)
#(110, 1000)
def add_mul(a, b):
return a+b, a*b
result_1, result_2 = add_mul(10,100)
print(add_mul(10,100))
print(result_1)
print(result_2)
# (110, 1000)
# 110
# 1000
#9 : return의 값이 없는 경우
특정 상황에서 함수를 빠져나가고 싶을 때 return을 단독으로 사용해 즉시 빠져나갈 수 있다. break와 유사.
def f_name(name):
if name == 'math':
return
print("I'm studying %s" %name)
f_name('python')
#I'm studying python
f_name('math')
#
#10 : 매개변수에 초기값 미리 설정하기
초기화시키고 싶은 매개변수는 항상 맨 마지막에 작성해야한다. M=True 값을 앞으로 옮긴다면 info('kim', 27)의 'kim'd은 첫번째 매개변수인가? 두번째 매개변수인가? 따라서, 초기화시키고 싶은 매개변수는 마지막에 작성하여야 생략할 때 문법적으로 어색함이 없고 문제가 없다.
def info(name, age, M=True):
print("My name is %s"%name)
print("I'm %d years old."%age)
if M:
print("Male")
else:
print("Female")
info('kim', 27)
# My name is kim
# I'm 27 years old.
# Male
info('han', 24, True)
# My name is han
# I'm 24 years old.
# Male
info('joe', 27, False)
# My name is joe
# I'm 27 years old.
# Female
#11 : 함수 안에서 선언한 변수의 효력 범위
함수 안에서 사용하는 매개변수는 함수 밖의 변수 이름과는 전혀 상관 없다. 함수 안에서 선언한 매개변수(지역변수)는 함수 안에서만 사용될 뿐 함수 밖에서는 사용되지 않는다.
- 지역변수 : 함수 안에서만 사용될 뿐 밖에서는 사용되지 않는다.
- 전역변수 : 어디서든 사용할 수 있다.
def var(a):
a = a + 1
return a
print(var(4))
#5
print(a)
#None
1) 함수 안에서 함수 밖의 변수를 변경하기(return)
a = 1 #전체의 a
def var(a): #함수의 a
a = a + 1 #함수의 a
return a #함수의 a
a = var(a) #전체의 a
print(a) #전체의 a
#2
- 함수 자체를 a에 담아줌으로써 밖의 변수를 변경시키는 것.
2) 함수 안에서 함수 밖의 변수를 변경하기(global)
a = 1
def var():
global a
a = a+1
var()
print(a)
#2
- 함수 내에서 global a를 통해 전역 변수 a = 1를 가져와 사용해 함수 내의 a도 전역변수 a이다.
느낀 점
프로그래밍의 세계는 참 무궁무진하다. 어떻게 이런 걸 구현했을까 싶다. 자료구조, 컴퓨터 공학 등의 내용이 더 궁금해진다. 어떻게 저장되고, 어떻게 불러와지는지. 관련 온라인 강의나 책을 찾아봐야겠다.
'파이썬 > Basics(기초)' 카테고리의 다른 글
[Python] 15. 내장함수(built-in function) 21종 (0) | 2021.10.11 |
---|---|
[Python] 14. 클래스(class), 생성자(Constructor), 상속(inheritance) (0) | 2021.10.11 |
[Python] 12. 반복문(while, for), 이중 for문, 리스트 내포 (0) | 2021.10.07 |
[Python] 11. 변수(variable)의 복사와 참조 (0) | 2021.10.06 |
[Python] 10. 불(Bool), 조건문(if, elif, else) (0) | 2021.10.06 |
댓글