2021. 4. 16. 14:01ㆍPYTHON/Do it! 점프 투 파이썬
04장 프로그램의 입력과 출력은 어떻게 해야할까?
04-1 함수
파이썬 함수의 구조
def 함수이름(매개변수):
수행할 문장1
수행할 문장2
...
매개변수와 인수
▷매개변수(parameter): 함수에 입력으로 전달된 값을 받는 변수
▷인수(arguments): 함수를 호출할 때 전달하는 입력 값
입력값과 결과값에 따른 함수의 형태
일반적인 함수: 입력값이 있고 결과값이 있는 함수
def 함수이름(매개변수):
수행할 문장
...
return 결과값
결과값을 받을 변수 = 함수이름(입력인수1, 입력인수2, ...)
입력값이 없는 함수
결과값을 받을 변수 = 함수이름()
결과값이 없는 함수
함수이름(입력인수1, 입력인수2, ...)
*print문은 함수의 구성 요소 중 하나인 '수행할 문장'에 해당하는 부분일 뿐이다. 결과값은 없다. 결과값은 오직 return 명령어로만 돌려받을 수 있다.
입력값도 결과값도 없는 함수
함수이름()
매개변수 지정하여 호출하기
매개변수를 지정하면 순서에 상관없이 사용할 수 있다는 장점이 있다
def add(a,b):
return a+b
result=add(a=3, b=7)
print(result)
10
result=add(b=5, a=3)
print(result)
8
입력값이 몇 개가 될지 모를 때는 어떻게 해야할까?
def 함수이름(*매개변수)
수행할 문장
...
여러 개의 입력값을 받는 함수 만들기
def add_many(*args):
result=0
for i in args:
result=result+i
return result
def add_mul(choice, *args):
if choice=="add":
result=0
for i in args:
result=result+i
elif choice=="mul":
result=1
for i in args:
result=result*i
return result
◈ 키워드 파라미터: 매개변수 이름 앞에 **을 붙이면 매개변수 kwargs는 딕셔너리가 되고 모든 key=value 형태의 결과값이 그 딕셔너리에 저장된다.
함수의 결과값은 언제나 하나이다
def add_and_mul(1,b):
... return 1+b, a*b
result=add_and_mul(3,4)
result=(7,12)
result1, result2=add_and_mul(3, 4)
(7,12)라는 튜플값을 갖거나 result1, 2를 나눠서 호출할 수 있다.
함수는 return문을 만나는 순간 결과값을 돌려준 다음 함수를 빠져나가게 된다.
매개변수에 초기값 미리 설정하기
def say_myself(name, old, man=True):
print("나의 이름은 %s입니다." %name)
print("나이는 %d살입니다." %old)
if man:
print("남자입니다.")
else:
print("여자입니다.")
매개변수에 man=True처럼 미리 값을 넣어준 것이다. 함수의 매개변수에 들어갈 값이 항상 변하는 것이 아닐 경우에는 이렇게 함수의 초기값을 미리 설정해두면 유용하다.
초기값을 설정해 놓은 매개변수 뒤에 초기값을 설정해 놓지 않은 매개변수는 사용할 수 없다. 초기화시키고 싶은 매개변수는 항상 맨 뒤에 놓아야 한다.
함수 안에서 선언한 변수의 효력 범위
함수 안에서 사용하는 매개변수(지역변수)는 함수 밖의 변수(전역변수) 이름과는 전혀 상관이 없다. 함수 안에서 선언한 매개변수는 함수 안에서만 사용될 뿐 함수 밖에서는 사용되지 않는다.
함수 안에서 함수 밖의 변수를 변경하는 방법
1. return 사용하기: 여기에서도 물론 vartest 함수 안의 a 매개변수는 함수 밖의 a와는 다른 것이다.
a=1
def vartest(a):
a=a+1
return a
a=vartest(a)
print(a)
2. global 명령어 사용하기: global a 문장은 함수 안에서 함수 밖의 a 변수를 직접 사용하겠다는 뜻이다.
a=1
def vartest():
global a
a=a+1
vartest()
print(a)
lambda
lambda는 함수를 생성할 때 사용하는 예약어로 def와 동일한 역할을 한다. 보통 함수를 한 줄로 간결하게 만들 때 사용한다. def를 사용해야 할 정도로 복잡하지 않거나 def를 사용할 수 없는 곳에 주로 쓰인다. lambda 예약어로 만든 함수는 return 명령어가 없어도 결과값을 돌려준다.
lambda 매개변수1, 매개변수2, ...: 매개변수를 사용한 표현식
add = lambda a, b: a+b
result=add(3,4)
print(result)
7
def add(a,b):
return a+b
result=add(3,4)
print(result)
7