함수 정의 - def
def add(x,y) :
print('더하기')
return x+y
def 으로 add라는 이름을 가진 함수를 정의한다.
함수명뒤의 ()에는 매개변수(parameter)가 들어가고 매개변수를 이용한 함수를 만든다.
return으로 값을 반환한다.
함수 호출, 실행
add(1,2) #더하기
함수명으로 함수를 호출한다.
이때 매개변수 자리에 들어가는 것은 인자(argument)라고 한다.
더한 값은 return으로 반환되지만 따로 저장이나 출력하지 않았기 때문에 print()만 실행된다.
n = add(3,5)
print(n) #8
return값을 n에 저장하여 출력하면 더한 값 결과를 확인할 수 있다.
def f() :
print('함수실행')
n=f()
print(n) #None
return 이 없으면 return None이 기본으로 None을 반환한다.
return 뒤에 값이 없는 것도 동일하다.
def add(x,y) :
return x+y
return x-y
print(add(3,2)) #5
return은 함수를 종료하는 것을 말하고 return을 만나게 되면 그 아래에 있는 코드는 실행되지 않는다.
return이 두개있어도 위의 return을 만나고 함수가 종료된다.
def add(x,y=1) :
return x+y
return x-y
print(add(3)) #4
매개변수와 인자의 개수가 맞지 않으면 오류가 발생한다.
매개변수에 = 으로 기본값을 지정해주면, 인자가 들어오지 않더라도 기본값으로 계산하게 된다.
인자를 하나만 받았기 때문에 x로 받아들이고, y는 기본값 1로 계산된다.
def add(x,y=1) :
return x+y,x-y
print(add(3)) #(4, 2)
return 값을 ,으로 연결해서 여러개 지정할 수도 있다.
튜플형태로 저장되어 반환된다.
패킹
여러개의 데이터를 묶어 할당
n = (1,2,3)
print(n) #(1,2,3)
언패킹
시퀀스 요소들을 여러 변수에 나누어 할당
n=(1,2,3)
a,b,c=n
print(a,b,c) #1 2 3
n=(1,2,3)
a,c=n #ValueError: too many values to unpack (expected 2)
a,b,c,d=n #ValueError: not enough values to unpack (expected 4, got 3)
언패킹시에는 변수의 개수와 할당요소의 개수가 동일해야 한다.
a,*rest, b =(1,2,3,4)
print(a,rest,b) #1 [2, 3] 4
언패킹시 변수에 * 를 붙이면 남은 요소들을 모두 저장할 수있다.
앞, 뒤의 값을 각각 a,b로 저장하고 나머지는 변수앞에 *를 붙여서 rest 변수에 한번에 저장되도록 하였다.
print(max(1,2,3)) #3
print(max(1,2,3,4,5)) #5
max()와 같은 내장함수는 인자의 개수와 관계없이 패킹된 인자들을 이용해서 함수를 실행할 수 있다.
이런 것은 가변인자를 이용한 것이다.
언패킹 연산자 *
* (asterisk) 는 시퀀스 언패킹 연산자(Sequence Unpacking Operator)로 시퀀스를 풀어 헤치는 연산자이다.
주로 튜플이나 리스트를 언패킹하는데 사용된다.
* 를 활용하여 가변인자를 만들 수 있다.
mat = [[1,2,3],
[4,5,6],
[7,8,9]]
print(*mat) #[1, 2, 3] [4, 5, 6] [7, 8, 9]
리스트에 *를 붙이면 각각의 요소들이 언패킹되어 떨어진다.
가변인자 *args
가변인자란 하나의 매개변수에 여러개의 인자를 넣을 수 있도록 하는 것이다. 가변 인자는 매개변수 앞에 *를 붙여서 만든다. 인자(arguments)의 args를 변수로 많이 사용한다.
def print_args(*args) :
print(args)
print_args() #()
print_args(1,2) #(1,2)
가변인자는 인자의 개수가 관계없다.
def print_args(arg,*args) :
print(f'arg={arg}, args={args}')
print_args(1,2,3) #arg=1, args=(2, 3)
print_args() #TypeError: print_args() missing 1 required positional argument: 'arg'
매개변수와 가변인자를 동시에 사용할 수 있다.
매개변수가 있기 때문에 인자가 하나는 반드시 필요하게 된다.
나머지는 개수에 관계없이 가변인자로 함수가 실행된다.
def print_args(arg,*args) :
print(f'arg={arg}, args={args}')
print_args(1,2,3,arg=4) #TypeError: print_args() got multiple values for argument 'arg'
순서대로 인자를 인식하기 때문에 1이 arg로 되었다. 이 상태에 arg=4 으로 새로운 인자를 넣어주면 오류가 발생한다.
def print_args(*args,arg) :
print(f'arg={arg}, args={args}')
print_args(1,2,3,4) #TypeError: print_args() missing 1 required keyword-only argument: 'arg'
print_args(1,2,3,arg=4) #arg=4, args=(1, 2, 3)
가변인자와 매개변수가 있을 때 가변인자를 앞에 표기하게 되면 여러개의 인자가 모두 가변인자로 인식이 된다.
그래서 매개변수 arg는 인자를 받지 못한것으로 오류가 발생한다.
이런 경우에는 arg는 따로 지정해주어야 한다.
가변 키워드 인자 (keyword argument) **kwargs
몇개의 키워드 인자를 받을지 모를 때 사용하는 것으로 변수 앞에 **를 붙여준다.
딕셔너리로 묶어서 처리된다.
def print_arg(arg, **kwargs):
print(f'arg={arg}, kwargs={kwargs}')
print_arg(1,k=2,d=3) #arg=1, kwargs={'k': 2, 'd': 3}
**으로 만든 가변 키워드 인자는 딕셔너리 형태의 key, value 값이 여러개 들어올 수 있는 것이다.
def print_arg(**kwargs):
for key, value in kwargs.items():
print(f'{key}...{value}')
print_arg(k=2,d=5,j=2)
가변키워드인자는 딕셔너리로 key, value로 나누어 따로 출력할 수 있다.
def print_arg(arg,*args,**kwargs):
print(f'arg={arg}, args={args}, kwargs={kwargs}')
print_arg(1,2,3,4,k=2,d=5,j=2) #arg=1, args=(2, 3, 4), kwargs={'k': 2, 'd': 5, 'j': 2}
매개변수, 가변인자, 가변키워드인자는 위와 같이 사용할 수 있다.
'Language > Python' 카테고리의 다른 글
파이썬 - 범위 Scope / 지역변수,전역변수 / LEGB규칙 (0) | 2022.07.21 |
---|---|
파이썬 함수 - map, filter, zip (0) | 2022.07.21 |
파이썬 Falsy / Truthy (0) | 2022.07.21 |
파이썬 조건 표현식(Conditional Expression) (0) | 2022.07.21 |
파이썬 리스트 중복 요소 개수 찾기 (카운트) , 중복요소 제거하기 (0) | 2022.07.21 |