함수 기초
1. 파이썬 함수.. 다른언어와의 차이점
1) 다른 언어와 다르게 함수도 하나의 자료형으로 간주한다.
2) 파이썬에서는 함수도 하나의 데이터이므로 변수에 대입할 수 있다.
3) 파이썬에서는 함수자체를 매개변수로 사용할 수 있다.
4) 함수이름은 함수의 주소를 의미한다.
5) 함수이름() 은 함수의 호출(실행)을 의미한다.
2. 내장함수(Built-in Function)
1) 별도의 모듈없이 사용할 수 있는 기본으로 제공되는 함수이다.
2) https://docs.python.org/3/library/functions.html 에 접속에서 내장함수 확인이 가능하다.
3) print(dir(__builtins__)) 명령으로도 내장함수 확인이 가능하다.
3. 반환
1) 파이썬은 return 뒤에 값이 없다면 None 객체를 반환한다.
2) return 문이 없어도 None 객체를 반환한다.
3) return 시 여러 개의 값을 반환할 경우 튜플을 리턴한다.
4. 매개변수 전달
1) 값 매개변수 전달
[1] 소스
def show(data):
data = 10
r = 30
show(r)
print(r)
[2] 결과
- 30
2) 리스트 매개변수 전달
[1] 소스
def test(t):
t[0] = 100
#주소 0번째 값을 100으로 변경
li = [1, 2, 3]
test(li)
#li리스트의 주소가 test함수로 넘어간다
print(li[0])
[2] 결과
- 100
3) 매개변수 기본값
[1] 매개변수가 있는 경우 매개변수를 넘겨주지 않으면 에러가 발생한다
[2] 파이썬에서는 매개변수에 기본값을 지정할 수 있다.
- 형식 : [매개변수이름 = 값]
- 기본값을 정의하면 함수 호출 시 값을 대입하지 않으면 기본값을 사용한다.
- 기본값을 정의하면 함수 호출 시 값을 대입하면 대입한 값을 사용한다.
- 기본값이 있는 매개변수 뒤에는 기본값이 없는 매개변수를 사용할 수 없다.
ex) def test(a, b = 0): <-- 가능
def test(b = 0, a): <-- 불가능
[3] 호출 시 매개변수 이름과 값을 대입에서 호출하면 매개변수 순서를 변경해서 호출이 가능하다.
◆ 소스
def print_args1(argc, *argv):
for i in range(argc):
print(argv[i])
print_args1(3, 'argv1', 'argv2', 'argv3')
# 매개변수 순서대로 전달
def print_args2(*argv, argc):
for i in range(argc):
print(argv[i])
print_args2('argv1', 'argv2', 'argv3', argc = 3)
# 가변 매개변수 다음에 사용하는 일반 매개변수는 키워드 매개변수로 호출해야 한다.
◆ 결과
- argv1
- argv2
- argv3
- argv1
- argv2
- argv3
4) 매개변수에 기본값 추가
[1] 소스
def fun1(n, step=3):
return n + step
a = 1
result = fun1(a, 10)
print(result)
b = 2
result = fun1(b)
print(result)
result = fun1(step=2, n = 10)
print(result)
[2] 결과
- 11
- 5
5) 매개변수에 리스트 기본값 추가
[1] 소스
def addition1(arg, result=[]) :
result.append(arg)
return result
print (addition1('1'))
print (addition1('2'))
[2] 결과
- [1]
- [1, 2]
6) 함수 내부에 리스트 생성
[1] 소스
def addition2(arg) :
result = []
result.append(arg)
return result
print (addition2('1'))
print (addition2('2'))
[2] 결과
- [1]
- [2]
7) 가변 매개변수
[1] 매개변수의 입력 개수가 달라질 수 있다.
[2] 매개변수 앞에 *을 붙으면 튜플이 된다.
◆ 소스
def merge_string(*text_list):
result = ''
for s in text_list:
result += " " + s
return result
print(merge_string('오늘', '날씨'), end="")
print(merge_string('매우', '좋다'))
◆ 결과
- 오늘 날씨 매우 좋다
[3] 매개변수 앞에 **을 붙이면 dict가 된다.
◆ 소스
def userURIBuiler(server, port, **user): uri = 'http://' + server + ':' + port + '/' for key in user: uri = uri + key + '=' + user[key] + '&' return uri print(userURIBuiler('test.com', '8080', id='d4tai1', pw='test'))
◆ 결과
5. 재귀함수(순환)
1) 자기 자신을 다시 호출하는 함수이다.
[1] 하노이 탑
◆ 소스
def hanoi(ndisks, startPeg=1, endPeg=3):
if ndisks:
hanoi(ndisks-1, startPeg, 6-startPeg-endPeg)
print(startPeg, "번 기둥의", ndisks, "번 고리를 ", endPeg, '번 기둥에 옮깁니다.')
hanoi(ndisks-1, 6-startPeg - endPeg, endPeg)
hanoi(ndisks=3)
◆ 결과(이미지는 이해를 돕기위한 사진)
- 1 번 기둥의 1 번 고리를 3 번 기둥에 옮깁니다.
- 1 번 기둥의 2 번 고리를 2 번 기둥에 옮깁니다.
- 3 번 기둥의 1 번 고리를 2 번 기둥에 옮깁니다.
- 1 번 기둥의 3 번 고리를 3 번 기둥에 옮깁니다.
- 2 번 기둥의 1 번 고리를 1 번 기둥에 옮깁니다.
- 2 번 기둥의 2 번 고리를 3 번 기둥에 옮깁니다.
- 1 번 기둥의 1 번 고리를 3 번 기둥에 옮깁니다.
6. 함수의 변수화
1) 함수 이름을 변수에 저장
[1] 리스트 내에 함수의 이름을 저장
◆ 소스
def plus(a, b):
return a + b
def minus(a, b):
return a - b
first = [plus, minus]
print(first[0](1,2))
print(first[1](2,1))
#first[0]은 plus()를 담고 있다.
#first[1]은 minus()를 담고 있다.
◆ 결과
- 3
- 1
7. 일등시민함수
1) 함수를 매개변수로 넘기거나 리턴할 수 있고 변수에 할당할 수
[1] 함수를 객체로 다루고 있기 때문에 가능하다.
◆ 소스
def hello_korean():
print('안녕하세요.')
def hello_english():
print('Hello.')
def get_greeting(where):
if where == 'K':
return hello_korean
else:
return hello_english
hello1 = get_greeting('K')
hello1()
hello2 = get_greeting('E')
hello2()
◆ 결과
- 안녕하세요.
- Hello.
8. pass
1) 이름만 만들어 놓고 아무 동작을 하지 않고 나중에 내용을 작성하기위해 만들어 놓는다.
2) 함수의 내용에 pass를 적어서 사용한다.
9. [.__doc__] 와 [help( )]
1) 함수에 도움말을 추가하는 방법이다.
2) 함수의 .__doc__속성에 "주석" 을 추가하여 도움말로 확인이 가능하도록 한다.
3) 함수정의 시 최상단에 """주석""", "주석" 과 같은 방식으로 추가하여 도움말로 확인이 가능하도록 한다.
[1] 도움말
◆ 소스
def plus(a, b):
return a + b
plus.__doc__ = "2개의 데이터를 받아 더한 값을 반환하는 함수이다."
def minus(a,b):
"""
2개의 데이터를 받아
뺀 값을 반환하는 함수이다.
"""
return a - b
help(plus)
help(minus)
◆ 결과
- Help on function plus in module __main__:
- plus(a, b)
- 2개의 데이터를 받아 더한 값을 반환하는 함수이다.
- Help on function minus in module __main__:
- minus(a, b)
- 2개의 데이터를 받아
- 뺀 값을 반환하는 함수이다.
10. lambda
1) 이름이 없는 한 줄짜리 함수이다.
2) [ lambda <인수나열> : <반환할내용>] 의 형식으로 사용한다.
3) 람다함수는 내부에서 새로운 변수를 선언할 수 없다.
4) 매개변수에 기본값을 부여할 수 있다.
5) 내부변수가 아닌 외부변수도 사용이 가능하다.
6) 람다함수 예제
[1] 람다함수를 이용한 컴프리헨션
◆ 소스
def g(func):
return [func(x) for x in range(-10, 10)]
#반복문을 돌아 x를 받아 func함수의 파라미터로 x를 넣고 호출한다.
#반환 받은 값을 리스트에 저장한다.
print(g(lambda x: x + 10))
#x를 넣어서 x에 10을 더한 결과를 반환하는 람다함수이다.
#즉 g함수에 람다함수를 파라미터로 넣은 것이다.
y = 10
print(g(lambda x: x + y))
#x를 넣어서 x에 y을 더한 결과를 반환하는 람다함수이다.
#람다 내부변수가 아닌 외부변수도 사용이 가능하다.
◆ 결과
- [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
- [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
'Programming Language > Python' 카테고리의 다른 글
| IP별 국가코드 매칭(feat.오프라인) (0) | 2021.01.20 |
|---|---|
| [File_Filter] 파일 분류하는 방법 (0) | 2019.08.06 |
| 데이터 관계분석 (0) | 2018.09.30 |
| 자료타입 (0) | 2018.09.15 |
| 파이썬 기본문법 (0) | 2018.09.04 |
댓글