이롭게 현명하게
[Python] 파이썬 함수 매개변수 본문
목차
매개변수 지정하여 호출하기
입력값이 몇 개가 될지 모를 때
키워드 매개변수 kwargs
함수의 리턴값은 한 개
매개변수에 초기값 미리 설정하기
함수 안에서 선언한 변수의 효력 범위
함수 안에서 함수 밖의 변수 변경하기
lamda
<정리>
[매개변수 지정하여 호출하기]
함수를 호출할 때 매개변수를 지정할 수 있다.
매개변수를 지정할 때 순서에 상관없이 사용할 수 있다.
def add(a,b):
return a+b
result = add(a=3,b=4)
print(result)
result = add(b=3,a=4)
print(result)
[입력값이 몇 개가 될지 모를 때]
여러 개의 입력을 처리할 대 매개변수에 '*'을 붙여준다.
입력값을 여러 개 받는 함수
함수의 형태에서 매개변수에서 *매개변수로 바뀌었다.
def 함수이름(*매개변수):
수행할 문장
...
args는 arguments의 약자이다.
*args는 임의로 정한 변수명이다.
사용자가 자유롭게 변경해도 된다.
def add(*args):
result = 0
for i in args:
result = result + i
return result
result = add(1,2,3)
print(result)
def add(ch,*args):
result = 0
if ch == 'add':
result = 0
for i in args:
result = result +i
elif ch == 'mul':
result = 1
for i in args:
result = result * i
return result
result1 = add('add',1,2,3,4)
result2 = add('mul',1,2,3,4)
print(result1) # 10
print(result2) # 24
[키워드 매개변수 kwargs]
kwargs는 keyword arguments의 약자이며 args와 마찬가지로 관례적으로 사용한다.
def 함수명(**kwargs):
수행할 문장1
수행할 문장2
kwargs는 딕셔너리가 된다.
매개변수 앞에 '**'을 붙이면 매개변수는 딕셔너리가 되며 모든 key=value형태의 입력값이 딕셔너리에 저장이 된다.
def print_kwargs(**kwargs):
print(kwargs)
print_kwargs(a=1) # {'a': 1}
print_kwargs(name='foo',age=3) # {'name': 'foo', 'age': 3}
[함수의 리턴값은 한 개]
add_and_mul. 함수는 2개의 입력 인수를 입력받아 더한 값과 곱한 값을 리턴한다.
리턴값은 a+b와 a*b 2개인데 리턴값은 튜플값 하나인(a+b, a*b)으로 리턴이 된다.
하지만 return a-b는 실행되지 않는다.
함수는 return문을 만나는 순간 리턴값을 돌려준 다음에 함수를 빠져나가기 때문이다.
def add_and_mul(a,b):
return a+b,a*b
return a-b
print(add_and_mul(2,3))
만약 하나의 튜플 값을 2개의 값으로 분리하여 받고 싶다면 변수 2개로 받을 수 있다.
def add_and_mul(a,b):
return a+b,a*b
return a-b
r1,r2 = add_and_mul(2,3)
print(add_and_mul(2,3)) # (5, 6)
print(r1) # 5
print(r2) # 6
[매개변수에 초기값 미리 설정하기]
매개변수 b=5 : 매개변수에 미리 값을 넣은 것
def add_and_mul(a,b=5):
return a+b
매개변수에 값을 넣지 않아도 초기값이 설정되어 있다.
def add_and_mul(a,b=5):
return a+b
a = add_and_mul(3)
b = add_and_mul(3,9)
print(a) # 8
print(b) # 12
초기값이 있는 매개변수를 설정할 때는 항상 뒤쪽에 놓아야 한다.
def add_and_mul(a,b=5): #
def add_and_mul(a, b=5,c): # Error
[함수 안에서 선언한 변수의 효력 범위]
변수 a를 생성하고 초기값을 1로 설정하였다.
vartest함수에서 매개변수 a의 값에 1을 더했으니 a는 2가 될 것 같지만 결괏값은 1이 나온다.
그 이유는 함수 안에서 사용하는 매개변수는 함수 안에서만 사용하는 "함수만의 변수"이기 때문이다.
즉 def vartest(a)에서 입력값을 전달받은 매개변수는 함수 안에서만 사용하는 변수이지 함수 밖의 변수와는 전혀 상관이 없다.
a = 1
def vartest(a):
a = a+1
vartest(a)
print(a) # 1
[함수 안에서 함수 밖의 변수 변경하기]
- return사용하기
- global 명령어 사용하기
1. return 사용하기
vartest 함수는 입력으로 들어온 값에 1을 더한 값을 리턴하도록 변경했다.
따라서 a = vartest(a)라고 작성하면 a에는 vartest함수의 리턴값이 대입된다.
이때 vartest함수 안의 a 매개변수는 함수 밖의 a와는 다른 것이다.
a = 1
def vartest(a):
a = a+1
return a
a=vartest(a)
print(a) # 2
2. global 명령어 사용하기
vartest함수 안의 global a 문장은 함수 안에서 함수밖의 a 변수를 직접 사용한다는 것이다.
하지만 프로그래밍을 할 때 global명령어를 사용하는 것은 추천하지 않는다.
함수는 독립적으로 조재하는 것이 좋기 때문이다.
외부 변수에 종속적인 함수는 그다지 좋은 함수가 아니다.
a = 1
def vartest():
global a
a = a+1
return a
a=vartest()
print(a) # 2
[lamda]
lamda : 함수를 생성할 때 사용하는 예약어로 def와 동일한 역할을 한다.
함수를 한 줄로 간결하게 만들 때 사용한다.
def를 사용할 정도로 복잡하지 않거나 def를 사용할 수 없는 곳에 사용된다.
함수면 = lamda 매개변수1,매개변수2...
add = lambda a,b : a+b
result = add(3,4)
print(result) # 7
잘못된 정보는 댓글에 남겨주시면 감사하겠습니다!😊
댓글과 좋아요는 큰 힘이 됩니다!
[ 참고자료 ]
'Python' 카테고리의 다른 글
[Python] 파이썬 클래스 (0) | 2023.03.30 |
---|---|
[Python] 프로그램 입출력 / sys모듈 (0) | 2023.03.29 |
[Python] 파이썬 사용자 함수 (0) | 2023.03.27 |
[Python] 파이썬 사용자 입출력 (0) | 2023.03.24 |
[Python] 파이썬 for문 (0) | 2023.03.23 |