파이썬(Python)

파이썬(python) 파이썬 함수 def

알통몬_ 2018. 1. 15. 12:53
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


이번 포스팅에서는 파이썬 함수에 대해 공부합니다.

함수를 사용하는 이유는 반복되는 코드가 많을 경우 그 코드를 효과적으로 사용하기 위해서

사용합니다.

함수 구조

1
2
3
4
5
def methodName(입력 변수, 입력변수2, ... ) :
    실행코드
    ...    
    ...
    return 반환값
cs


함수에는 4종류가 있습니다.

1. 입력 변수가 있고 반환 값이 없는 함수

1
2
3
4
#입력 변수 O 반환값 X
def inputOreturnX(name, age) :
    print("이름은 : {0} 이고, 나이는 {1}".format(name, age))
 
cs
\

2. 입력 변수가 있고 반환 값이 있는 함수

1
2
3
4
5
#입력 변수 O 반환값O
def inputOreturnO(name, age) :
    returnStr = "이름은 : {0} 이고, 나이는 {1}".format(name, age)
    return returnStr
 
cs

3. 입력 변수가 없고 반환 값이 없는 함수

1
2
3
#입력 변수X 반환값X
def inputXreturnX() :
    print("이름은 : thomas 이고, 나이는 27")
cs

4. 입력 변수가 없고 반환 값이 있는 함수

1
2
3
4
#입력 변수X 반환값O
def inputXreturnO() :
    str = "이름은 : thomas 이고, 나이는 27"
    return str
cs


함수를 만들 때 이런 고민이 있을 수 있습니다.

입력되는 값의 갯수를 모를 때는 어떻게 하지?

예를 들어 어떤 행사를 하는데 그 날 행사에 입장한 

입장객의 평균 나이를 구하는 함수를 만든다고 했을 때, 

그 날 행사에 몇 명이 올지는 행사가 끝날 때까지 알 수가 없습니다.


이런 경우 *입력 변수 를 사용합니다.

1
2
3
4
5
6
7

def audienceAvgAge(*args) :
    avg = 0
    for i in args :
        avg = avg + i
    avg  = avg / len(args)
    print("입장객의 평균 나이 : {0}".format(avg))
cs

* 커맨드창에서 args[1] 이 아니라 그냥 i 입니다.

*입력 변수 를 사용할 때 함수의 입력 변수가 꼭 *입력 변수 하나여야 하는 건 아닙니다.

입력 변수가 여러 개 일 수 있는데, *입력 변수는 꼭 가장 마지막에 사용해야 합니다.

1
2
3
4
5
6
7
8
9
10
11
def sumOrAvg(choice, *args) :
    val = 0
    if choice == "sum" :
        for i in args :
            val = val + i
    elif choice == "avg" :
        for i in args :
            val = val + i
        val = val / len(args)
    return val
 
cs

--------------------------------------------------------------------------------------------------------


--------------------------------------------------------------------------------------------------------



파이썬 함수의 특징

 - 모든 함수의 반환 값은 하나여야 합니다.

1
2
def sum_and_sub(i , j):
    reurn i + j, i - j
cs

위 같은 함수를 선언하고 실행을 시켜보면 에러가 날 것 같지만,

실제는 그렇지 않고, 값을 2개 가지는 튜플을 반환해줍니다.

이런 두 개 이상의 반환 값들을 각각의 반환 값으로 받고 싶을 때는 아래처럼->

1
2
3
4
5
def sum_and_sub(i , j):
    return i + j, i - j
first, second = sum_and_sub(103)
print(first, second)
 
cs


하지만 함수를 아래처럼 작성하면, 첫 번째 리턴만 하고 끝나기 때문에 값을 하나만 받습니다.

1
2
3
def sum_and_sub(i , j):
    return i + j 
    return i - j
cs


함수의 입력 변수 초기 값 설정해놓기

1
2
3
4
5
6
def sum_and_sub(i , j, sum = True):
    if sum:
        result = i + j
    else:
        result = i - j
    return result
cs

이런 식으로 함수를 만들어 놓았을 경우, 마지막 입력 변수인 sum은

함수 호출 시 값을 입력 안하면 True로 기본 값이 설정됩니다.

sum_and_sub(10, 3)

sum_and_sub(10, 3, True)

위 두 호출은 같은 결과를 가져옵니다.

하지만 초기 값이 들어간 입력 변수는 입력 변수 목록 중 

가장 뒤에 와야 합니다.

1
2
3
4
5
6
def sum_and_sub(i , sum = True, j):
    if sum:
        result = i + j
    else:
        result = i - j
    return result
cs

이렇게 만들 경우 에러가 발생합니다.


지역 변수와 전역 변수

기본적으로 함수 안에 선언된 변수들은 함수 안에서만 효력이 있습니다.

1
2
3
4
5
6
7
= 1
def vars(a):
    a = a +1
    print(a)
vars(a)
print(a)
 
cs

위 코드에서 vars(a)를 호출하면 2가 출력되지만

마지막 print(a)는 1이 출력됩니다.

함수 안에 호출된 변수를 전역변수로 사용하고 싶다면 

아래처럼 사용하면 됩니다.

1
2
3
4
5
6
7
8
= 1
def vars():
    global a
    a = a +1
    print(a)
vars()
print(a)
 
cs


여기까지 함수에 대해서 간단하게 알아보았습니다.

이상입니다.

감사합니다.

반응형