반응형

파이썬에서 함수 호출 방법에 대해 알아보고자 한다.



아래에서 나타나겠지만, 파이썬의 함수 호출은 다른 언어들과는 조금 다른 면이 있다.


파이썬 자체가 추구하는 것이 타입 없이 모든 것을 표현 가능하게 만들고 있는 것이고


함수에서도 인자라던지, return 타입이라던지 모두 타입이 없어서 자유롭게 이용할 수 있다.


우선 함수를 어떻게 정의하는지 부터 알아보자.


1. 함수에 인자도 없고, return 값도 없을 때

def 함수명():

 함수에 들어갈 내용


2. 함수에 인자가 없고, return 값이 있을 때

def 함수명():

 함수에 들어갈 내용

 return 결과 값


3. 함수에 인자가 있고, return 값이 없을 때

def 함수명(인자1, 인자2, ...):

 함수에 들어갈 내용



4. 함수에 인자가 있고, return 값도 있을 때

def 함수명(인자1, 인자2, ...):

 함수에 들어갈 내용

 return 결과 값



바로 예시를 통해 확인해보자.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
list1 = [1,2,3,4,5]
list2 = ['q','w','e']
 
def function(): # 출력 함수 정의
    print("함수가 리스트에?")
    
list3 = [1,"abc",'def',list1, list2, function]
 
print(list3)
list3[5]() # 함수도 리스트에 들어갈 수 있다.
 
def addFunc(n1, n2): # 함수의 인자와 리턴값 모두 타입이 없기에 아무거나 가능하다.
    return n1 + n2
 
list3.append(addFunc) # list3의 끝부분에 addFund를 붙여주는 함수(append)
 
print(list3[6]('함수가 리스트에서 콜이 되네',' 파이썬은 신기하다..'))
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus


설명은 다음과 같다.


4 :: print를 쓸 수 있는 함수를 정의한다. 리턴 값이 없다.

7 :: 리스트에 숫자, 문자열, 리스트1, 리스트2, 함수를 넣을 수 있다.(파이썬은 마구잡으로 들어가진다.)

8 :: list3을 출력한다. 전체가 출력될 것이다.


12 :: addFunc를 정의한다. 인자는 n1, n2이다

13 :: n1 + n2를 리턴한다. 이게 숫자이든 문자열이은 n1과 n2의 타입만 같으면 된다.


15 :: list3의 7번째에 addFunc를 추가한다.

17 :: 제대로 추가된지 확인 후 출력한다.



파이썬의 인자 전달의 특수성


파이썬은 인자를 전달하는데 다음과 같은 규칙을 가진다.


함수를 콜 할 때 순서대로 적는다면 함수에 인자가 순서대로 들어가지만,


인자의 이름에다가 값을 보내면 해당하는 인자에 값이 들어간다.


이 내용또한 예시를 바로 보자.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def func(n1, n2, n3 = 100000):
    print("n1 :: ", n1)
    print("n2 :: ", n2)
    print("n3 :: ", n3)
    return n1 + n2 + n3
 
= 1; b = 100; c = 10000
 
print(func(a,b,c),"\n"# 그냥 a,b,c를 인자로 보낸 상황
 
print(func(n1 = b, n2 = c, n3 = a),"\n"# 해당하는 인자에 값을 보내는 상황
 
# 인자를 2개 보내면 마지막 인자는 10만이라는 값을 가지고 있기에 그것으로 초기화
print(func(a,b))
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus






1 :: func 함수 선언, n1, n2, n3의 인자가 있고 n3에 값이 들어오지 않을 경우 100000의 값을 가짐

5 :: func 함수 리턴


9 :: a,b,c를 func 인자에 보낸다.

11 :: func의 인자 n1 = b가 되도록, n2 = c가 되도록, n3 = a가 되도록 인자를 보낸다.

14 :: func에 인자 a와 b만 보낸다. n3가 10만으로 초기화되어있기에 가능하다.



이때 위의 그림에서만 나타나는 부분이 있는데 

def func2(n1 = 100000, n2, n3):
return n1 + n2 + n3

이렇게 작성한다면 틀린다.


    def func2(n1 = 100000, n2, n3):

             ^

SyntaxError: non-default argument follows default argument



다음과 같은 문구가 나타나는데 그 이유는 기본값으로 초기화된 인자는 항상 마지막에 위치해야 하기 때문이다.




반응형