- 내장함수(built-in)함수 : 파이썬 인터프리터에는 사용 가능한 함수와 형으로 모듈이나 패키지를 가져오지 않고도 기본적으로 내장되어있음.
예. len( ) , sum( ) , print()
- Parameter 개수와 Argument 개수 동일해야함
docs.python.org/ko/3/tutorial/controlflow.html#more-on-defining-functions
4. 기타 제어 흐름 도구 — Python 3.9.0 문서
docs.python.org
1. 함수선언 / 정의
- 함수를 이용하면 여러줄의 코드를 재사용 할 수 있어 편리
def 함수이름(매개변수(Parameter) ) :
statement1.....
2. 디폴트값
- 함수 선언 시 파라미터의 디폴트값(기본 설정 값) 설정 시 디폴트값 입력은 옵션(생략 가능)
- 값을 생략하면 디폴트값 사용.
3. signature
sum (shift + tab)
==> <function sum(iterable, start=0, /)>
4. Docstring
- Module 첫번째 줄, 함수 선언 후 내부 바로 아랫줄 또는 클래스 선언 후 내부 바로 아랫줄에 큰따옴표 3개나 작은 따옴표 3개로 작성하면됩니다.
def a():
'''Docstring : 함수에 대한 설명
'''
return 1
a()
5. 매개변수
- 매개변수(Parameter): 함수를 선언/정의할 때 쓰는 변수
- 인자(Argument) : 함수 사용 할 때 쓰는 변수
(1) Positional argument
- 선언한 파라미터의 순서와 인자의 입력 순서,갯수 동일해야함
- 함수에서 정의한 위치대로 대입하는 것
def abc(a,b,c):
return a ,b , c
abc(3,2,1)
==> (3,2,1)
abc(1,2)
==> TypeError : abc()에서 매개변수 c에 대응하는 positional argument를 입력하지 않아서 에러발생.
(2) keyword argument
- 순서에 관계없이 정의한 매개변수(Parameter) 이름에 따라 값 대입
abc(c=1,b=3,a=2)
==> (1,3,2)
(3) Positional과 Keyword 혼합
- keyword 방식 사용한 이후에는 일괄적으로 keyword 방법만 사용 가능
def abc(a, b, c):
'''
Docstring: 입력값 & 순서 그대로 출력
'''
return a, b, c
abc(1, c=2, b=3)
==> (1,3,2)
# SyntaxError: keyword, positional, keyword
abc(c=2, 2, b=3)
==>SyntaxError: positional argument follows keyword argument
(4) Positional only
- - /의 앞에 오는 인자들 positional 방식으로만 인자를 쓸 수 있도록 강제
- python 3.8부터 가능(이전 버전에서는 사전 정의된 positional only 함수는 있지만, 사용자가 만들 수는 없었다.)
sum
==> <function sum(iterable, start=0, /)>
def abc( a, b, c ,/) :
'''연습'''
return a,b,c
==> SyntaxError: invalid syntax
(5) Keword only
- * 이후로 인자를 keyword 방식으로만 입력하도록 강제
def abc(*, a):
'''키워드방식만 '''
return a
abc(a=1)
==> 1
# positional 방식은 Error
abc(1,b=2,c=3)
==> TypeError: hamsoo() got an unexpected keyword argument 'b'
(6) 가변 포지셔널
- *Parameter : 포지셔널 방식으로 입력되는 인자의 개수에 상관없이 모두 받음
def abc(*a):
'''포지셔널 방식만 가능
인자개수 제한 없음'''
return a
abc()
==> ()
#1개 입력한 경우
abc(1)
==> (1,)
#5개 인자 입력한 경우
abc(1,2,3,4,5)
==> (1, 2, 3, 4, 5)
import matplotlib.pyplot as plt
plt.plot([0,2,4,6,8,10],[1,2,1,2,1,2],color='navy')
#call signatures: 함수 호출, [ ] 생략 가능(option) - 불명확
# * 키워드 방식으로만 사용 Othre parameters, custom ** 가변 포지셔널 방식
(7) 가변 키워드
- **Parameter : 키워드 방식으로 입력되는 인자의 개수에 상관없이 모두 받음
- 입력값 : 매개변수, 인자\
- 출력값 : dictionary { 매개변수= key, 인자= value }
- 키값 재할당 불가 (유일성)
def abc(**a) :
'''
** : dictionary {키:값}
'''
if 'color' in a:
print("colorful")
return a
# 인자 없는경우.
abc()
==> {}
abc(color=2)
==> colorful
{'color': 2}
# 인자 1개
abc(a=1)
==> {'a': 1}
# 인자 여러개
abc(b=1, a=1, c=1)
==> {'b': 1, 'a': 1, 'c': 1}
# 가변 키워드에 color가 입력되면 print가 실행되는 조건문이 포함된 함수
def abc(**a) :
'''
** : dictionary {키:값}
'''
if 'color' in a.keys():
print(a.keys())
return None
# color가 없으므로 아무것도(None) 리턴하지 않음
abc()
# color가 있으므로 print가 실행
abc(color=1)
==> dict_keys(['color'])
import matplotlib.pyplot as plt
plt.bar([1,2,3], [2,3,2]) #signature: 가변 키워드 사용
# 가변 키워드 edge 사용
plt.bar([1,4,9], [1,2,3], align="edge")
# 가변 키워드 edge, color 사용
plt.bar([1,4,9], [1,2,3], align="edge", color="gold")
(8) 혼합
- 가변 키워드/가변 포지셔널은 한번 만 사용 가능
# Error
def abc(**a, **b):
pass
==> SyntaxError: invalid syntax
- 가변 키워드 다음에 가변 포지셔널이 올 수 없음
# Error
def abc(**a, *b):
pass
==> SyntaxError: invalid syntax
6. 반환값
(1) 반환값 없음
# 반환값 없음, 매개 변수 없음
def cat():
print('Meow!')
# 반환값 있음, 매개 변수 없음
def return_true():
return True
(2) 반환값 있음
1) PASS
- 함수 정의 시점에서 수행 코드 정해지지않을 경우 임시로 입력 가능
- 어떠한 기능도 수행하지 않음
2) return
- 원하는 값 or 하나의 값으로 축약 가능한 식을 반환
# 반환값 있음, 매개 변수 있음
def return_addition(a, b):
return a + b
* 함수를 다른 이름에 재할당해도 __name__은 원래 이름을 알려준다.
dog = cat
dog() #함수
==> Meow!
# __name__은 원래 이름
dog.__name__
==> 'cat'
'PYTHON' 카테고리의 다른 글
| indexing & slicing string (0) | 2020.12.11 |
|---|---|
| 문자열(str) 타입 (0) | 2020.12.11 |
| Method Overloading (0) | 2020.11.20 |
| 변수의 스코프 (0) | 2020.11.20 |
| MAP (0) | 2020.11.20 |