0) 파이썬의 함수 구조

def 함수  (매개변수):
수행할 문장



<예시>
def add(a,b):
     return a+b

 

 

 

 

 

 

 

1) 매개변수와 인수의 차이점

매개변수는 변수, 즉 함수에 입력될 값이 들어갈 공간을 의미한다. 

인수는 함수를 호출할 때 전달하는 입력값을 의미한다. 

이 둘은 혼용해서 사용하는 용어이다. 그.. a, b가 인수가 되기도 하고, 3,4가 매개변수 자리에 들어가기도 해서?
아무튼 매개변수와 인수는 우리가 입력하는 값이기 때문에, 입력값이라고 한다. 함수의 인수, 파라미터, 매개변수, 입력값은 모두 같은 말이다. 

예를 들어, 

def add(a,b):
return a+b 라고 할 때, a와 b는 add라는 함수를 구성하고 있는 변수이다.
그리고 이 함수를 이용해서 3과 4를 더한 값을 구하려 할 때, 
print(add(3,4))로 그 값을 출력할 수 있다. 이 때 add함수에 전달하는 입력값인 3,4를 인수라고 한다. 

이러면 7이라는 결과가 나올텐데, 이때 7을 리턴값이라고 한다. 결괏값, 출력값, 반환값, 돌려주는 값 모두 다 같은 말이다. 

 

 

 

 

 

 

 

 

2)입력값이 없거나 리턴값이 없거나 둘 다 없는 함수

 

< 예시 1 >

def say():

       return 'hi'

 

< 예시 2 >

def add(a,b):

      print("%d와 %d의 합은 %d입니다." %(a, b, a+b))

*print문은 '수행할 문장'이지 리턴값이 아니다. 리턴값은 오직 return 명령어를 통해서만 가질 수 있음.

 

< 예시 3 >

def say():

      print("hi")

*say()

  hi

이렇게만 사용이 가능한, 입력값도 출력값도 없는 함수이다.

 

 

 

 

 

 

3) 몇개인지 모를 입력값을 입력받는 함수 = args, kwargs이용

 

def add_many(*args):
    result=0
    for a in args:
        result+=a
    return result

처럼, 매개변수 자리에 *args 혹은 *변수이름아무거나를 넣으면, add_many함수에 넣은 여러가지 값들을  자동으로 튜플로 바꿔 준다. 함수에 넣는 숫자를 다 더하고 싶은데 그 값과 값의 개수를 아직 모를 때 매개변수 *args(arguments)를 사용하면 됨. 

 

def print_kwargs(**kwargs):
        print(kwargs)

--> 예시:

print_kwargs(e=4)
{'e': 4}

**kwargs 혹은 **변수이름아무거나 를 넣으면, 입력 값을 자동으로 딕셔너리로 바꿔 준다. keyword arguments의 약자.

 

 

 

 

 

4) return 값은 오직 하나이며, 만나는 순간 함수를 즉시 빠져나간다.

그래서 return 값이 없는 함수에서 이걸로 함수를 빠져나가는 방법도 자주 사용된다고 함. 

 

 

 

 

 

 

5) 초깃값이 설정된 매개변수

 

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

 

초깃값 female=True가 있기 때문에, female 자리에 True라고 입력을 하든 입력을 하지 않든 "여자입니다"가 출력된다. 

False라고 입력하면 "남자입니다"가 출력된다. 만약 매개변수를 gender='여성'과 같이 지정했다면, 뒤에 나오는 if문에 if gender='여성': ~ 이렇게 쓰면 되고, 역시 gender자리에 아무것도 입력하지 않아도 여성이라고 입력한 것과 같은 결괏값이 출력된다. 

초깃값이 설정된 매개변수를 사용할 때의 주의사항은, 초기화한 매개변수는 매개변수 중 가장 마지막에 놓아야 한다는 것이다.

 

 

 

 

6) 변수의 효력 범위

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

vartest(a)
print(a)

변수 a의 효력은 빨간 색 영역 안에서만 발휘된다. def안의 a는 지역변수이기 때문에 파란 색 a와는 아무 관련이 없다.

빨간 부분을 실행한 후에 함수 안의 매개변수 a는 2가 되었을 것.
그러나 결괏값을 리턴한다는 말이 없으므로 print할 때 그 값이 반영이 안 된다. print(a)의 a는, 중간 세 줄의 영향을 전혀 받지 않고 그냥 첫째줄 a=1만 보고 프린트를 한 셈이다.

 

함수를 거쳐서 나 a의 값을 출력하려면 어떻게 해야 할까?

함수가 끝나기 전에 return a라는 출력값을 정해주고,

함수에서 나온 뒤 a(라는 새로운 변수)=vartest(a)라고 정의한 뒤에

print(a)를 하면 그 매개변수 a의 값을 불러올 수 있다.

하지만 이때도 print 안에 있는 a는 매개변수 a를 의미하는 것이 아니고, vartest(a)의 값이라는 의미다. 

 

또, 함수 안에서 a=global을 이용하는 방법이 있다.

함수 밖의 a를 함수 안에서 직접 사용하겠다고 선언하는 것이다.

#예시vartest_global.py


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

vartest() 
print(a)

 

"하지만 프로그래밍을 할 때 global 명령어는 사용하지 않는 것이 좋다. 함수는 독립적으로 존재하는 것이 좋기 때문이다. 외부 변수에 종속적인 함수는 그다지 좋은 함수가 아니다. 따라서 되도록 global 명령어를 사용하는 이 방법은 피하고 첫 번째 방법을 사용하기를 권한다."라고 박응용 선생님이 말씀하셨다.

 

 

 

 

 

6) lambda 예약어

 

add = lambda a,b: a+b

 

함수이름=lambda 매개변수1, 매개변수2: 수행할 문장(매개변수를 이용한 표현식) 

으로, def와 동일한 역할을 하지만 좀 간단하게 쓰고 싶을 때 쓸 수 있다.

 

+ Recent posts