EverGiver
04-1 함수 본문
728x90
파이썬 함수의 구조
def 함수 이름(매개변수):
수행할 문장1
수행할 문장2
...
def add(a, b):
return a + b
>>> a = 3
>>> b = 4
>>> c = add(a, b) // add(3, 4)의 반환 겂을 c에 대입
>>> print(c)
7
매개변수와 인수
- 매개변수
: 함수에 입력으로 전달된 값을 받는 변수 - 인수
: 함수를 호출할 때 전달하는 입력
def add(a, b): // a, b는 매개변수
return a + b
print(add(3, 4)) // 3, 4는 인수
입력값과 결괏값에 따른 함수의 형태
- 일반적인 함수
def 함수 이름(매개변수): 수행할 문장 ... return 결괏값
>>> def add(a, b): result = a + b return result >>> a = add(3, 4) >>> print(a) 7
결과값을 받을 변수 = 함수이름(입력인수 1, 입력인수 2, ...)
- 입력값이 없는 함수
>>> def say(): return 'Hi' >>> a = say() >>> print() Hi
결과값을 받을 변수 = 함수이름( )
-
>>> def add(a, b): print("%d %d의 합은 %d입니다." % (a, b, a+b)) >>> a = add(3, 4) 3,4의 합은 7입니다. >>> print(a) None결괏값이 없는 함수
→ 결괏값은 오직 return 명령어로만 돌려받을 수 있다함수이름(입력인수1, 입력인수2, ...)
- 입력값도 결괏값도 없는 함수
>>> def say(): print('Hi') >>> say() Hi
함수 이름()
매개변수 지정하여 호출하기
>>> def add(a, b):
return a+b
>>> result = add(a=3, b=7) // a에 3, b에 7을 전달
>>> print(result)
10
// 매개변수를 지정하면 순서에 상관없이 사용할 수 있다는 장점이 있다.
>>> result = add(b=5, a=3) // b에 5, a에 3을 전달
>>> print(result)
8
입력값이 몇 개가 될지 모를 때는 어떻게 해야 할까?
def 함수이름(*매개변수):
수행할 문장
...
- 여러 개의 입력값을 받는 함수 만들기
→ *args처럼 매개변수 앞에 *을 붙이면 입력값을 전부 모아서 튜플로 만들어 준다.>>> def add_many(*args): result = 0 for i in args: result = result + i return result >>> result = add_many(1,2,3) >>> print(result) 6 >>> result = add_many(1,2,3,4,5,6,7,8,9,10) >>> print(result) 55
- 키워드 파라미터
: 매개변수 앞에 별 두 개(**)를 붙인다.
→ 매개변수 이름 앞에 **을 붙으면 매개변수 kwargs는 딕셔너리가 되고 모든 key=values 형태의 결괏값이 그 딕셔너리에 저장된다.>>> def print_kwargs(**wargs) print(wargs) >>> print_kwargs(a=1) {'a': 1} >>> print_kwargs(name='foo', age=3) {'age': 3, 'name': 'foo'}
함수의 결괏값은 언제나 하나이다
>>> def add_and_mul(a,b):
return a+b, a*b
// 튜플 값 하나인 (a+b, a*b)로 돌려준다.
>>> result = add_and_mul(3,4)
result = (7,12)
// 하나의 튜플 값을 2개의 결괏값처럼 받고 싶은 경우
>>> result1, result2 = add_and_mul(3, 4)
result 1, result2 = (7, 12)
def add_and_mul(a,b):
return a+b
return a*b
>>> result = add_and_mul(2,3)
>>> print(result) // 두 번째 return문인 return a*b는 실행되지 않는다.
5
- return의 또 다른 쓰임새
>>> def say_nick(nick): if nick == "바보": return print("나의 별명은 %s입니다." % nick) >>> say_nick('야호') 나의 별명은 야호입니다. >>> say_nick('바보') >>> // 이처럼 return으로 함수를 빠져나가는 방법을 이용할 수 있다.
매개변수에 초깃값 미리 설정하기
def say_myself(name, old, man=True):
print("나의 이름은 %s입니다." % name)
print("나이는 %d살입니다." % old)
if man:
print("남자입니다.")
else:
print("여자입니다.")
>>> say_myself("박응용", 27)
>>> say_myself("박응용", 27, True)
// 동일한 결과 출력
나의 이름은 박응용입니다.
나이는 27살입니다.
남자입니다.
>>> say_myself("박응선", 27, False)
나의 이름은 박응선입니다.
나이는 27살입니다.
여자입니다.
def say_myself(name, man=True, old):
print("나의 이름은 %s입니다." % name)
print("나이는 %d살입니다." % old)
if man:
print("남자입니다.")
else:
print("여자입니다.")
>>> say_myself("박응용", 27)
// 오류 발생
→ 초기화시키고 싶은 매개변수를 항상 뒤쪽에 놓자.
함수 안에서 선언한 변수의 효력 범위
a = 1 // 함수 밖의 변수 a
def vartest(a): // vartest 함수 선언
a = a + 1 // vartest 함수 선언
varset(a) // // vartest 함수의 입력값으로 a를 줌
print(a) // a 값 출력
- 함수 안에서 함수 밖의 변수를 변경하는 방법
1. return 사용하기
2. global 명령어 사용하기(추천 x)a = 1 def vartest(a): a = a + 1 return a a = vartest(a) // vartest(a)의 결괏값을 함수 밖의 변수 a에 대입 print(a)
a = 1 def vartest(): global a a = a + 1 vartest() print(a)
lambda
보통 함수를 한 줄로 간결하게 만들 때 사용한다.
lambda 매개변수 1, 매개변수 2, ...: 매개변수를 사용한 표현식
>>> add = lambda a, b: a+b
>>> result = add(3, 4)
>>> print(result)
7
→ lambda 예약어로 만든 함수는 return 명령어가 없어도 결괏값을 돌려준다.
728x90
'Python > 문법' 카테고리의 다른 글
04-3 파일 읽고 쓰기 (0) | 2021.08.05 |
---|---|
04-2 사용자 입력과 출력 (0) | 2021.08.04 |
03-3 for문 (0) | 2021.08.03 |
03-2 while문 (0) | 2021.08.03 |
03-1 if문 (0) | 2021.08.03 |
Comments