함수 (Function) 2

Junho Song·2022년 11월 30일
0

Python

목록 보기
9/11

매개변수에 초깃값 미리 설정하기

def say_myself(name, age, man=True): 
    print("나의 이름은 %s 입니다." % name) 
    print("나이는 %d살입니다." % age) 
    if man: 
        print("남자입니다.")
    else: 
        print("여자입니다.")

say_myself라는 이름의 함수를 만들었다. 함수는 name, age, man=True 라는 세개의 매개 변수를 갖도록 했다. 이 함수의 기능은 워낙 간단하니 마지막 매개변수인 man=True에만 집중해보도록 한다.

세번째 매개변수는 초깃값을 미리 정한 케이스로 만약 세번째 매개변수 없이 아래와 같이 함수를 사용해도 없는 값의 초깃값은 True이기 때문에 출력값 마지막에 "남자입니다."가 출력된다.

say_myself("박응용", 27)

당연히 세번째 매개변수에 True를 넣어도 마지막 라인에 "남자입니다."가 출력된다. 그리고 False를 넣으면 해당 라인에 "여자입니다."가 출력된다.

그리고 아래와 같이 초깃값이 없는 매개변수는 초깃값이 있는 매개변수 뒤에 사용할 수 없다. 즉, (name, age, man=True)는 되지만 (name, man=True, age)는 안된다. 초기화시키고 싶은 매개변수는 항상 뒤쪽에 놓아야 한다.

def say_myself(name, man=True, age): 
    print("나의 이름은 %s 입니다." % name) 
    print("나이는 %d살입니다." % age) 
    if man: 
        print("남자입니다.")
    else: 
        print("여자입니다.")

함수 밖과 안에서 선언한 변수

def vartest(a):
    a = a + 1

vartest(3)
print(a)

위의 vartest함수를 만들고 함수에 사용된 a매개변수에 3이라는 값을 지정했다. vartest(3)에 따라 print(a) 명령어는 3+1인 4를 출력해야 할 것 같지만 위의 명령어를 실행하면 Error메세지가 뜬다.

그 이유는 함수 안에서 지정된 매개변수는 함수 밖의 변수 이름과 전혀 상관이 없고 함수 안에서만 실행되고 끝나기 때문이다.

위의 함수가 4를 출력하도록 하고 싶다면 아래와 같이 작성해야한다.

def vartest(a):
    a = a + 1
	print(a)

vartest(3)

함수 안의 변수를 사용해 함수 밖의 변수를 변경하는 방법

바로 위의 예시에서 함수 밖과 안의 매개변수는 관여하지 않는다고 했다. 하지만 return과 global 명령어를 사용해 함수 안과 밖의 변수를 변경할 수 있다.

1. return 사용방법

a = 1 
def vartest(a): 
    a = a +1 
    return a

a = vartest(a)
print(a)

위의 함수를 보면 return a를 추가했다. 이를 통해 a=vartest(a)로 변수를 지정해 주면 a에는 vartest함수의 리턴값이 대입된다.

그렇다고 해서 vartest함수 안의 a매개변수가 함수 밖에 a함수에 개입하는것은 아니다. 그냥 방법론으로 함수 밖의 print(a)가 함수기능대로 작동하도록 만들어버린것.

2. global 명령어 사용방법

a = 1 
def vartest(): 
    global a 
    a = a+1

vartest() 
print(a)

두번째 방법은 global 명령어를 사용하는 방법인데 위와 같이 global a 를 지정해주면 함수 안에서 함수 밖의 a변수를 직접 사용하도록 지정하는 것이다. 다만 점프투 파이썬에서는 이 방법을 추천하지 않는다. 함수는 독립적으로 존재하는 것이 좋기 때문에 동일한 변수하나에 외부변수에 종속적 함수를 작성하는 것은 좋은 함수가 아니라는 점을 강조한다. global명령어는 정말 필요한 경우가 아니라면 가급적 사용하지 말것을 권장.


lambda

lambda는 예약어중 하나로 def와 동일한 역할을 한다. 여러줄의 함수를 한줄로 간결하게 만들어주는 예약어이다. 복잡하지 않거나 def를 사용할 수 없는 곳에 주로 쓰이는 함수 예약어다.

add = lambda a, b: a+b
result = add(3,4)
print(result)

사용방법

  • 함수명 = lambda 매개변수1, 매개변수2,.... :매개변수를 이용한 표현식
  • lambda로 만든 함수는 return 명령어 없어도 결과값을 리턴해준다

위 lambda로 만든 함수는 아래 def로 만든 함수와 완전 동일하다.

def add(a,b)
	return a+b

result = add(3,4)
print(result)
profile
상위 1%의 금융데이터 분석가를 꿈꿉니다.

0개의 댓글