[PythonBasic] function parameters

Alex of the year 2020 & 2021·2020년 6월 25일
0

Python

목록 보기
5/18
post-thumbnail

함수의 가장 기본적인 형태 Positional Arguments

def love_you(my_name, your_name):
	print(f"{my_name} loves {your_name}")
    
love_you("Alex", "Tom")

>>> "Alex loves Tom"
  1. 함수 선언: def [함수명](param1, param2):
            [실행될 식]
  2. 함수 호출해서 사용 시: [함수명](param1, param2)
  3. 출력


변형1) Keyword Arguments

def love_you(my_name, your_name):
	print(f"{my_name} loves {your_name}")
   
love_you(your_name="Alex", my_name="Tom")

>>> Alex loves Tom
    
  1. 함수 선언: 기본식과 동일
  2. 함수 호출해서 사용 시: 함수명(param2이름= "param2", param1이름= "param1")
  3. 출력
  • 특이점: 함수 선언 시에는 my_name 파라미터(param1)를 먼저 받겠다고 했으나, 실제 사용 시에는 파라미터 순서가 바뀌어서 your_name(param2)을 먼저 넣었으나 문제 없이 진행됨. Keyword Arguments 방식으로 진행 시, 파라미터의 순서는 바뀌어도 된다!
    게다가 가독성도 ↑ (파라미터 볼 때 누가 누군지 확실히 알겠으니) --> 실수 가능성 ↓


<인자 대입 순서 주의> 변형2) Mixing positional arguments and keyword arguments

def love_you(my_name, your_name):
	print(f"{my_name} loves {your_name}")
    
love_you("Alex", your_name="Tom")

>>> Alex loves Tom
  1. 함수 선언: 기본식과 동일
  2. 함수 호출해서 사용 시: [함수명] ("param1", param2이름="param2")
  3. 출력
  • 특이점: 순서에 따라 인자를 대입하는 positional(기본)방식과 대입될 인자의 이름을 키워드로 지정하는 keyword 방식을 적절히 섞은 방식이다. 다만 주의할 점은 🍎순서가 바뀌어서는 안된다는 것이다🍎 만일, love_you(your_name="Tom", "Alex")라고 호출하겠다면 만나게 될 에러는 다음과 같다.
Traceback (most recent call last):
    File "python", line 1
SyntaxError: positional argument follows keyword argument


<디폴트 설정 순서 주의> 변형3) Parameter Default Value

def love_you(my_name, your_name="Tom"):
	print(f"{my_name} loves {your_name}")
    
love_you("Alex")

>>> Alex loves Tom
  1. 함수 선언: 기본식과 동일해 보이지만 🍎두 번째 파라미터에 미리 default 값을 줌🍎
  2. 함수 호출해서 사용 시: 함수명("param1")
  3. 출력
  • 특이점: 파라미터 디폴트 값을 미리 설정해주는 함수식. 미리 설정된 값이 존재하기 때문에 함수를 호출해서 사용할 때도 따로 파라미터 값을 설정할 필요가 없어서 param2는 따로 언급을 하지 않고 정해진 값이 없는 param1만을 인자로 넣은 것을 확인할 수 있다. 단, 🍎첫번째 파라미터에는 디폴트 값을 설정할 수 없다. 즉, Default 인자는 Non-Default보다 먼저 정의될 수 없다! 🍎 만일, 첫번째 파라미터에 디폴트 값을 설정한다면 만나게 될 에러는 다음과 같다.
Traceback (most recent call last):   
    File "python", line 1 
SyntaxError: non-default argument follows default argument

그럼 생각해보자
왜 Default는 Non-Default보다 먼저 정의될 수 없을까?

함수의 기본식은,

def 함수명(매개변수):
    <수행할 문장1>
    <수행할 문장2>
    ...

이다. 내 생각엔 아마도 디폴트값이 있는 인자가 먼저 정의될 경우, 함수를 실제 호출해서 사용할 때 대입시키는 인자와의 충돌이 있지 않을까라는 생각이다. 다시 말해, 위의 식에서 함수 정의 시, def love_you(my_name="Alex", your_name):을 쓰고 함수 호출 시에 love_you("Tom")을 적으면 Tom이 이미 정의해버린 Alex 자리에 들어가고자 할 것 같은 것이다!

profile
Backend 개발 학습 아카이빙 블로그입니다. (현재는 작성하지 않습니다.)

0개의 댓글