KEK 개발로그
[Python] 함수 3 - 매개변수 설정, 함수 안 변수, global, lambda 본문
반응형
함수 3 - 매개변수 설정, 함수 안 변수, global, lambda
1. 매개변수에 초깃값 미리 설정하기
- 매개변수 초깃값 설정: 매개변수에 미리 값을 넣어 줌.
>> 왜?? 함수의 매개변수에 들어갈 값이 항상 변하는 것이 아닐 경우에는 함수의 초깃값을 미리 설정해주면 유용하다.
# 매개변수 초깃값 설정
def say_myself(name, old, man=True):
print("나의 이름은 %s 입니다." % name)
print("나이는 %d살입니다." % old)
if man:
print("남자입니다.")
else:
print("여자입니다.")
say_myself("홍길동", 22) # 남자입니다.
say_myself("홍길동", 22, True) # 남자입니다.
say_myself("홍길동", 22, False) # 여자입니다.
say_myself("홍길동", 22, 1) # 남자입니다.
say_myself("홍길동", 22, 0) # 여자입니다.
>> man이라는 변수에 입력값을 주지 않아도 미리 초기값을 True로 설정해두었기 때문에 '남자입니다.'가 출력된다.
>> man이라는 변수에 True나 True가 될 값을 넣어주면 '남자입니다.'가 출력된다.(ex. True ,1,... 등)
>> man이라는 변수에 False나 False가 될 값을 넣어주면 '여자입니다.'가 출력된다.(ex. False, 0,.. 등)
- 주의) 초깃값을 설정한 매개변수의 위치
>> 초기화시키고 싶은 매개변수는 항상 뒤에 놓아야 한다!
>> 초깃값을 설정해 놓은 매개변수 뒤에 초깃값을 설정해 놓지 않은 매개변수를 사용하면 에러(SyntaxError)가 뜬다.
# 매개변수 위치
def say_myself(name, man=True, old):
print("나의 이름은 %s 입니다." % name)
print("나이는 %d살입니다." % old)
if man:
print("남자입니다.")
else:
print("여자입니다.")
# >> 오류(Error)
2. 함수 안에서 선언한 변수의 효력 범위
- 함수 안에서 선언된 (매개)변수는 그 함수만의 변수이다.
>> 함수 밖에 있는 변수와 이름이 같을지라도 따로 어떤 조치(return, global)를 취하지 않는 이상 그 함수만의 변수이므로 서로 다른 것이다.
>> (이건 프로그래밍 하면서 더 자세히 알아가야 될 것 같다.. 일단 이렇게 알고 있기!)
# vartest 1
a = 1
def vartest(a):
a = a +1
return a
vartest(a) # 아무값도x(none도 x) >> 함수 안에 print(a)를 써야 2 나옴(return쓰면 error, return 쓰면 함수를 이렇게 호출하면 안됨)
print(a) # 1 >> 2 아님.(같은 a여도 함수 안 != 함수 밖)
# vartest 2
a = 1
def vartest(a):
a = a +1
return a
b = vartest(a)
print(b) # 2
print(a) # 1
# vartest 3
def vartest(a):
a = a + 1
vartest(3) # vartest 함수 안에서 a는 4가 됨(출력되는건 없음)
print(a) # error뜸. a 변수를 어디서도 찾을 수 없기 때문이다!(함수 안에서 선언한 매개변수는 함수 안에서만 사용될 뿐 함수 밖에서는 사용되지 않는다)
- 함수 안에서 함수 밖의 변수에 영향을 주는 방법
>> 2가지 방법: return 사용 / global 사용
1) return 사용하기
# vartest_return
a = 1
def vartest(a):
a = a +1
return a
a = vartest(a) # a가 vartest 함수의 결괏값으로 바뀐다
print(a) # 2
>> return을 사용하면 vartest 함수를 사용해서 함수 밖의 변수 a를 1만큼 증가시킬 수 있다.
2) global 사용하기
# vartest_global
a = 1
def vartest():
global a
a = a+1
vartest()
print(a) # 2
>> global 명령어: 함수 안에서 함수 밖의 a 변수를 직접 사용하겠다는 뜻
>> 프로그래밍할 때 global 사용 비추천!!
>> global을 사용하면 함수가 외부 변수에 종속정인 함수가 되는데 함수는 독립적으로 존재하는 것이 좋다!
>> 그렇기 때문에 global 사용은 가급적 X. 첫번째(return) 방법을 사용하자.
3. lambda
- 함수를 한줄로 간결하게 만들 때 사용하는 예약어.
>> def와 동일한 역할(함수 생성)
>> def를 사용해야 할 정도로 복잡하지 않거나 or def를 사용할 수 없는 곳에 주로 쓰인다.
>> 형태: lambda 매개변수1, 매개변수2, ...:
>> lambda 예약어로 만든 함수는 return 명령어가 없어도 결과값을 돌려준다.
# lambda
add = lambda a, b: a+b
result = add(3, 4)
print(result) # 7
# def - 위에 lambda 함수와 완전히 동일하다.
def add(a, b):
return a + b
result = add(3, 4)
print(result) # 7
반응형
'Python > 문법' 카테고리의 다른 글
[Python] 파일을 통한 입출력 1 - 파일 생성, 쓰기모드(w) (2) | 2022.09.21 |
---|---|
[Python] 사용자 입력과 출력 - input, print (2) | 2022.09.20 |
[Python] 함수 2 - 입력값, 결과값, 파라미터, return문 (0) | 2022.09.19 |
[Python] 함수 1 - 함수, 매개변수, 인수 (0) | 2022.09.19 |
[Python] for문 2 - range 함수, 리스트 내포 (0) | 2022.09.16 |