Dev

[DevOps] 1. DevOps 파이썬 핵심 - 3) 함수

mlslly 2024. 4. 26. 16:10

함수

함수의 구조

함수명, 파라미터, 코드 내용, 함수 설명 독스트링 등으로 구성

>>> def my_function():
...     '''이 부분은 독스트링이다.
... 
...     무엇을 하는 함수인지, 
...     파라미터는 무엇인지, 
...     함수의 반환값은 무엇인지 설명한다
...     '''

 

- 위치 파라미터 positioned parameters (==인수)

>>> def positioned(first, second):
...     '''순서대로 할당하기'''
...     print(f'first:{first}')
...     print(f'second:{second}')
... 

>>> positioned(1,2)
first:1
second:2

 

- 키워드 파라미터 keyword parameters (==인수)

>>> def keywords(first=1, second=2): 
...     '''기본값 할당'''
...     print(f'first : {first}')
...     print(f'second : {second}')

# 하나만 주면, 첫번째 인수에 적용, 두번째는 기본값으로
>>> keywords(0)
first : 0
second : 2

# 두개를 주면 두 인수를 적용
>>> keywords(3,4)
first : 3
second : 4

# 값을 키워드로 지정해주면, 모두 인수에 적용되고 순서는 상관이 없음 
>>> keywords(second= 'one',first='two')
first : two
second : one

 

- return : 함수에서는 모든 함수가 return을 통해 값을 반환함, 반환값을 정의하지 않았다면 None이 반환

>>> def no_return():
...     '''정의된 반환 없음'''
...     pass

>>> result = no_return()
>>> print(result)
None

>>> def return_one():
...     '''1을 반환'''
...     return 1

>>> result = return_one()
>>> print(result)
1

 

객체 함수 **

함수는 그자체로 객체이다. 따라서 함수를 주고받거나 자료 구조에 저장하는 것이 가능. 아래처럼 2개의 함수를 정의해서 리스트로 만들고 리스트를 순회하며 함수 호출 가능

# 함수 1 : double 함수 
>>> def double(input): 
...     '''입력값의 2배'''
...     return input*2

>>> double
<function double at 0x10c358f40>
>>> type(double)
<class 'function'>

# 함수 2 : triple 함수
>>> def triple(input):
...     '''입력값의 3배'''
...     return input*3

>>> triple
<function triple at 0x10c358fe0>

# 함수 1, 2를 리스트화 및 사용 
>>> functions = [double, triple]
>>> for function in functions : 
...     print(function(3))

6
9

 

익명 함수

제한적인 함수를 만들때 lambda를 활용해서 이름 없는 함수를 만들 수 있고, 보통 작은 함수를 인수로 사용하는 함수에서 제한적 활용함 

- lambda 함수 : 식별자(Identifier) 없이 실행 가능한 함수(Function)

>>> items = [[0,'a',2],[5,'b',0],[2,'c',1]]

# sorted를 하면, 각 하위 목록의 첫째 항목을 기준으로 정렬됨
>>> sorted(items)
[[0, 'a', 2], [2, 'c', 1], [5, 'b', 0]]

# 두번째 항목을 반환하는 메서드를 정의하기 
>>> def second(item): 
...     '''두번째 엔트리 반환'''
...     return item[1]

# 두번째 항목 반환 메서드(함수)를 key 파라미터로 넘겨주기 : 두번째 항목을 기준으로 정렬됨
>>> sorted(items, key=second) 
[[0, 'a', 2], [5, 'b', 0], [2, 'c', 1]]

 

- lambda 함수 key 활용

>>> items = [[0,'a',2],[5,'b',0],[2,'c',1]]

# 첫번째 인자 기준 정렬 
>>> sorted(items, key=lambda item : item[0])
[[0, 'a', 2], [2, 'c', 1], [5, 'b', 0]]

# 두번째 인자 기준 정렬
>>> sorted(items, key=lambda item : item[1])
[[0, 'a', 2], [5, 'b', 0], [2, 'c', 1]]

# 세번째 인자 기준 정렬
>>> sorted(items, key=lambda item : item[2])
[[5, 'b', 0], [2, 'c', 1], [0, 'a', 2]]