함수 기초
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 |
댓글