함수란 일정한 작업을 수행하는 코드블럭이다. 개념적으로는 수학과 동일하다
함수를 사용하는 이유는
1.반복되어 계속사용되는 코드들을 함수로 정의해 효과적으로 사용하기위해
2.코드의 가독성을 높이기 위해
파이썬에서 함수는 def키워드 정의된다
def 함수이름(parameter):
문장1
문장N
[return 리턴값]
parameter은 매개변수라고 하며, parameter를 받아 결과값을 도출해낸다. 여기서의 결과값(output)은 return값이라고도 한다.
return과 print의 차이에 대해 확실하게 이해를 하기 어려웠는데
[https://sscoding.tistory.com/2] 이 글을 보고 한번에 이해했다. 혹시 나처럼 어려우신분들은 이분의 글을 읽어보시는걸 추천!
def test(a, b, c):
print(a + b + c)
test(a + b + c)
위의 예시처럼 함수에서 정의한 위치대로 대입되는 보통의 인자를 의미한다.
매개변수 이름을 지정해서 입력하는 매개변수를 키워드 매개변수라고 한다.
위의 예시에서
test(a=10, b=5, c=7)
처럼 입력하는것을 의미힌다.
키워드 매개변수 방식으로 매개변수값을 전해주면 위치가 마구잡이로 되어도 잘 맞춰 들어간다.
def test(a, b, c):
print(a + b + c)
test(c=7, b=5, a=10)
순서를 맞추어서 parameter 값을 전해주는 positional arguments와 keyword arguments를 혼용하는 것도 가능.
python
def test(a, b, c):
print(a + b + c)
test(a=10, 5, 6)
여기서 주의할 점은 키워드 매개변수만 있을경우 순서가 뒤죽박죽이 되어도 상관이 없으나
positional의 경우에는 본인 위치에 반드시 있어야하기 때문에 test(c=6, 10, 5)로 입력시 Error가 발생한다
position argument의 경우 반드시 순서가 지켜져야 하는 속성이 있으므로 keyword가 와도 그 속성은 변하지 않는다는 점을 이해하면 될 듯!
매개변수에 처음부터 값을 정해줄 수도 있다. 함수를 정의할때 (매개변수 = 값)형태로 지정해주면 되며, 이는 매개변수를 입력하지 않았을때 자동으로 매개변수에 들어가는 값이 된다.
def test(a, b, c=10):
print(a + b + c)
test(1,3) #>c의 값이 빠져있으나 이경우 결과값은 1+3+10 =14가 된다
#c에 10이라고 사전에 입력을 했기때문!
여기서 주의할 점은 기본 매개변수의 뒤에는 일반 매개변수가 올수 없다는점이다
먄약 test(a, b=10, c)가 가능하다면 print(1,3)을 입력할 경우
3이라는 숫자가 b에 가야할지, c에 가야할지를 정하지 못하는 상황이 발생한다.
따라서 파이썬에서는 내부적으로 룰을 정한 것이다.
가변인수란 인수를 원하는 만큼 받을 수 있는 함수로 *
를 붙여 * args
형태로 표시하며 다음과 같은 구조를 가진다.
가변인수 뒤에는 일반 인수는 올 수 없으며, 가변인수는 하나만 사용할 수 있다.
def func_param_with_var_args(name, age, *args):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
func_param_with_var_args("김코드", "0101234", "seoul", 20, "HI")
키워드 매개변수 + 가변 매개변수 의 형태
인수앞에 **
을 붙여 **kwargs
의 형태로 나타난다. 여러개의 값을 받아올 수 있으며, 가장 끝에 위치
def func_param_with_kwargs(name, age, address=0, **kwargs):
print("name=",end=""), print(name)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul")
def mixed_params(name="아이유", *args, age, **kwargs, address):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
이렇게 할 경우 SyntaxError: invalid syntax 라는 에러가 뜬다! 이는 작성한 코드자체가 문제가 있어서 해결이 되지 않는 다는 뜻이다.
위치매개변수와 가변 키워드 매개변수는 아래와 같은 순서대로 정리한다.
매개변수들의 특징을 잘 이해하는게 중요할것 같다!
def mixed_params(age, name="아이유", *args, address, **kwargs):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
mixed_params(20, "정우성", "01012341234", "male", mobile="01012341234", address="seoul")