Python: Function (arguments)

Joey Lee·2020년 4월 23일
0

Python

목록 보기
4/12

1. 기초 개념

  • 함수 선언 : 필요한 코드를 작성
  • 함수 호출 : 특정 함수를 부른다. 실행한다.
  • 인수 : 함수 호출 시 넘겨주는 값 (인자, argument)
  • 매개변수 : 넘겨온 인수를 저장할 변수 (parameter)
  • 리턴 값 : 함수가 일을 마치고 리턴해 주는 값
    -> 리턴 값은 둘 이상일 수 있음. -> 튜플로 전달됨
    -> 리턴 값이 없으면 None
    -> 함수 중간에 return 문을 만나면 그 이하는 실행되지 않음
  • 가변 인수 : 디폴트 인수값을 가지고 있다가 인수가 넘어오지 않으면 기본값을 사용한다. (그러므로, 인수의 개수가 변할 수 있음)
  • 디폴트 인수 : 매개변수에 디폴트 값을 가지고 있다.
def plus(x,y):    #x,y가 매개변수
	return x+y

a = plus(10, 20) # 10, 20이 인수 
print("a ==>", a)
  • 주의사항 : 매개변수 개수 = 인자 개수가 같아야 함. 같지 않으면 에러 발생

2. Positional Argument

Positional Arguments는 가장 기본적인 함수의 파라미터 형태로, 말 그대로 위치에 따라 인자가 함수 매개변수에 대입되고 함수 호출시 매개변수 순서대로 입력/호출된다. 따라서 매개변수의 순서를 기억해야만 오류 없이 원하는 결과값을 얻을 수 있다.

3. Keyword Argument

입력 순서와는 관계없이 (함수선언시 입력한 파라미터 순서대로가 아닌) parameter 이름으로 맞추어서 값을 전달하는 방식이다. 때문에 순서를 기억할 필요가 없다.

4. Mixing positional arguments and keyword arguments

순서를 맞추어서 parameter 값을 전해주는 positional arguments와 keyword arguments를 혼용하여 사용하는것도 가능하다. 다만, 여기서 중요한것은

  • keyword arguments 는 순서가 바뀌어도 상관 없지만 positional arguments 부분은 순서를 지켜줘야 함
  • keyword argument는 positional argument 다음에 위치해야 함

5. Parameter default value

함수의 parameter에 default 값을 정의해 줄 수 도 있다. Default 값이 정의된 paramter는 함수가 호출될때 값이 넘겨지지 않아도 괜찮다. 값이 넘겨지지 않은 경우 default 값이 자동으로 넘겨지게 된다.

  • 단, 조심해야 할 점은 default 값이 정의된 parameter가 default 값이 정의 되지 않은 parameter 보다 먼저 위치해 있으면 안 됨. Syntax 오류 발생함

Assignment

이번 과제는 programming 과제가 아니라 개념을 설명하는 과제 입니다. 함수를 정의 할때 default value parameter를 non-default value parameter 앞에 정의 하면 안된다고 배웠습니다. 왜 안돼야만 하는지 생각해보시고 블로깅 하여 채널에 공유해 주세요.

Answer

파이썬 함수에서 Arguments들의 순서는 미리 정해져 있는데, 이 규칙에 따라 순서대로 Arguments가 나와야 합니다.

[함수 Arguments 우선순위]
1. positional argument
2. default argument
3. positional arguments들의 집합
4. keyword arguments
5. keyword default arguments
6. keyword arguments의 집합

아래 2가지 코드 비교를 통해서 설명하도록 하겠습니다.

1) default value parameter가 non-default value 보다 뒤에 선언된 경우

def multiply(a,b,c=10): #1번 예시
  return a * b * c

print(multiply(2,3))

1번의 경우, 파이썬 함수 규칙에 따라 position argument가 먼저 나왔고, multiply(2,3) 함수 호출 시, 인자 a에는 2과 대입되고, b에는 3이 대입되고, 마지막으로 c는 함수 호출 시에는 없지만 함수에 default로 설정되어 있기에 60이란 결과값이 제대로 출력이 됩니다.

def multiply(a=10,b,c): #2번 예시
  return a * b * c

print(multiply(2,3))

하지만 2번 예시처럼 default parameter가 non-default parameter보다 앞에서 선언을 하게 되면 아래와 같은 에러 메시지가 뜹니다.

multiply 함수 호출 시, position arguement 로직에 따라 인자로 받은 값 2을 a에 대입을 하려고 하는데, a에는 이미 10이란 default value가 있기 때문에 충돌이 발생하게 됩니다. 따라서 Syntax 에러에서 non-default argument가 default argument의 뒤에 나왔다라는 에러 메시지가 뜨게 되는 것입니다.

profile
안녕하세요!

0개의 댓글