티스토리 뷰

python lecture/basic

[edu] function (함수)

burningrizen 2019. 1. 8. 12:31

[syntax]

def foo(a, b):
return a + b


print(foo(2, 3))

a, b 라는 매개 변수를 2개 가지고 있고 a+b 를 반환하는 함수이다.


여기서 foo 는 함수 이름이고 네이밍 컨벤션은 소문자와 구분자는 언더바로 한다.


1~2 라인은 함수의 정의이고 정의만으로는 함수가 실행되지 않는다.


5번째 줄에 함수가 호출되면 해당 함수가 동작한다.



[return]

def foo(a, b):
return a + b
print("end")


print(foo(2, 3))

return 을 만나는 즉시 함수는 종료 되므로


end 는 출력되지 않는다.


print 안에는 foo 의 리턴값인 5가 입력되서


최종적으로 5가 출력된다.



[매개변수, 위치]

def foo(a, b): ...


print(foo(2, 3))

함수를 정의할때 매개변수를 2개 입력 받으면


함수를 호출할 때도 2개의 매개변수를 맞게 넣어줘야한다.


매개변수의 갯수가 일치하지 않으면 TypeError 가 발생한다.



[매개변수 기본값]

def foo(a, b=0):
return a+b


print(foo(2))

함수를 정의할 때 매개변수의 기본값을 설정해 줄 수 있다.


기본값은 해당 인자를 입력하지 않을 때 사용된다.


foo 함수의 매개변수가 2개 가 될때는 b 의 기본값은 사용되지 않는다.



[타입 명시]


미리 정의된 매개변수, 리턴 타입이 아닐 경우 


IDE 에서 해당 코드에 따로 표시를 해두어 노티를 해준다.

def foo(a: int, b: str, c: bool) -> tuple:
print(a, b, c)
return ["sdf", "sdf"]


foo("hello", 123, "@#4")



[args, kwargs]


 함수에 매개변수들을 정해진 개수를 입력받지 않고 가변적으로 받는 방법을 알아보자


이것을 보기전에 packing, unpacking 을 먼저 알아보기 바란다

def foo(*args, **kwargs):
print(*args)
print(*kwargs)


foo(1, 2, 3, age=10, name="kim")


위와 같이 튜플과 딕셔너리를 가변적으로 받으면


개수에 상관없이 받을수 있다(아무 인자값도 없어도 된다)


결과는 다음과 같이 나온다


1 2 3
age name


[local variable]

def foo(n):
r = n * n
return r


함수 foo 에서 정의된 n, r 이라는 변수는 함수 foo 에서만 유효한


지역변수이다.


외부에서 만약 n, r 이라는 변수가 있다면 이것과 전혀 다른 이름만 똑같은 것이다


학교에서 A반 1번과, B반 1번은 같은 1번이지만 지역이 다른것과 비슷하다



댓글