반응형
Function(함수) 1-1
- 자주 사용하는 코드를 독립적인 모듈로 만들어 둔 것.
- 별도의 메모리 영역을 할당 받아서 실행
1.종류
1) Maker Function : 처음부터 제공되는 함수
2) User Define Function : 사용자가 만든 함수
3) 3rd party Function : 제조사가 주지 않고, 내가 만들지 않은 함수. 패키지를 다운로드 받아서 설치해야만 사용이 가능
2.함수를 표현
이름(매개변수) -> 리턴 타입
이름(매개변수) : 이 경우는 이 함수가 데이터를 리턴하지 않는 경우의 가능성이 높음
- 아래 설명문에서 리턴을 한다고 작성하는 경우도 있다.
3.용어
- 매개변수는 함수를 호출 할 때 넘겨주어야 하는 데이터
- 리턴은 함수를 수행하고 난 후 남겨주는 데이터
- 리턴이 있으면 출력을 할 수 있고 변수에 저장해서 재사용 가능
- 리턴이 없으면 출력도 못하고 변수에 저장도 안됨.
4.함수의 사용법 확인
- help(함수명)
- return이 없는 함수는 내 데이터를 받아서 데이터에 작업을 수행합니다.
help(max) max(...)
max(iterable, *[, default=obj, key=func]) -> value
max(arg1, arg2, *args, *[, key=func]) -> value
With a single iterable argument, return its biggest item. The
default keyword-only argument specifies an object to return if
the provided iterable is empty.
With two or more arguments, return the largest argument. return 값이 있는 함수
li = [100, 300, 200]
li.sort() # return이 없기 때문에 li 자신의 데이터에서 작업을 수행한다.
print(li)
5. 파이썬에서는 함수가 일급객체
- 파이썬에서는 함수도 하나의 데이터
- 함수()은 함수를 호출해서 실행하는 것입니다.
- 함수는 함수가 저장된 곳의 참조를 의미한다.
li.sort()
print(li) 출력값 나옴
print(li.sort) 함수가 저장된곳의 참조 영역을 불러옴
<built-in method sort of list object at 0x10b2cb1e0>
6.빌트 인 함수 확인
dir(__builtins__)
- 파이썬에서는 __ 있는 것은 예약어
Function(함수) 1-2
1. 매개변수가 있는 함수
- 매개변수가 있는 경우 매개변수의 이름만 나열하면 됩니다.
- 매개변수가 있는 함수를 호출할 때는 기본적으로 매개변수를 전부 대입해서 호출해야 합니다.
- 매개변수는 순서대로 대입해야 하는데 매개변수 이름과 함께 대입하면 순서를 변경해서 대입 해도 된다
- 대다수의 경우 첫번째 매개변수는 핵심이 되는 매개변수일 가능성이 높기 때문에 이름없이 대입하고 두번째 매개변수부터 이름과 함께 대입한다.
1) 매개변수를 적게 대입해서 발생하는 예외 : TypeError : disp() missing 1 required positional argument:'cnt'
2) 매개변수의 자료형이 잘못된 경우 : TypeError:'str' object connot be interpreted as an integer
매개변수에 기본값 부여 가능
매개변수를 만들 때
=
기본값을 설정해주면 된다.기본값이 있는 매개변수는 생략하고 호출이 가능
매개변수 앞에
*
을 붙이면 데이터를 몇개를 대입하던지 이 매개변수가 전부 받습니다.- 함수 내에서는 tuple로 취급합니다
- 이 매개변수는 반드시 마지막에 설정 되어야 합니다.
매개변수 앞에
**
을 붙이면 dict가 됩니다.- 이 매개변수에 데이터를 대입할 때는
key=value
형식으로 대입해야 합니다. **
이 붙은 매개변수를 가진 함수를 사용할 때는 document를 잘 읽어보고 사용해야 한다.- 그래프를 그리는 함수들이 이 형태의 매개변수를 가지고 있는 경우가 많다.
- 적절한 옵션들을 찾아서 사용해야 한다.
- 이 매개변수에 데이터를 대입할 때는
2.return
- 함수의 수행을 종료하고 호출한 곳으로 돌아가는 명령어
- return 할 때 데이터를 가팅 가지고 갈 수 있습니다.
- return 뒤에 가지고 갈 데이터를 입력하면 데이터를 가지고 돌아간다.
- 기본적으로 return은 1개만 가능합니다.
- 2개 이상 리턴하고자 하는 경우에는 (튜플), [리스트]. {set 이나 dict} 형태로 묶거나 나중에 나오는 class의 instance를 만들어서 리턴해야 한다.
- 파이썬은 튜플의 경우는 변수에 나누어서 저장이 가능합니다.
- 변수나열 = (튜플)
- 튜플의 데이터를 순서대로 변수에 대입합니다.
- 변수의 개수와 튜플의 데이터가 개수가 다른 경우에는 마지막 변수에 튜플의 모든 데이터를 대입합니다.
3.재귀함수(recursion)
- 함수가 자기 자신을 다시 호출하는 것
- 함수가 함수를 호출하는 구조라서 느리고 메모리 사용량도 많지만 코드를 간결하게 만들 수 있다는 장점이 있다.
# 재귀함수 - 피보나치수열
def fibonacci(n) :
if n==1 or n == 2 :
return 1
else :
return fibonacci (n-1) + fibonacci(n-2)
print(fibonacci(9))
피보나치수열, 하노이의 탑
4.파이썬에서 함수는 일급 객체
- 함수를 변수에 저장할 수 있고 리턴할 수 있고 매개변수로 대입할 수도 있다.
- 함수형 프로그래밍을 사용할 때와 closure를 만들기 위해서 사용합니다.
- 함수형 프로그래밍은 데이터의 모임(list, tuple, set, dict등)에 하나의 함수를 적용하는 프로그래밍
- closure는 함수가 함수를 리턴해서 함수 내부의 데이터를 함수 외부에서 변경하도록 하는 프로그래밍
5. 람다(lambda)
- 파이썬에서는 이름없는 한 줄 짜리 함수
def addint(x, y) :
return x + y
#위의 함수를 람다식으로 표현
lambdaadd = lambda x, y : x + y
print(lambdaadd(100, 200))
- 람다 함수도 매개변수의 초기화 가능
- 한 줄 짜리 함수라서 변수 선언은 안됩니다.
6.함수적 프로그래밍
- 데이터의 모임에 함수를 전부 적용하는 프로그래밍
1) Map
- 데이터의 모임과 함수를 매개변수로 받아서 데이터의 모임에 함수를 전부 적용해서 결과를 데이터의 모임으로 리턴해주는 함수
- 대입되는 함수는 1개의 매개변수를 가져야 하고 반드시 데이터를 리턴해야 한다.
# 10000 개의 데이터에 1씩 더한 결과로 list를 만들기
# 반복문을 이용한 방법
import datetime
def inc (x) :
return x+1
collection = [ i for i in range(0, 100000000, 1)]
print(datetime.datetime.now())
result = []
for i in collection :
result.append(inc(i))
print(datetime.datetime.now())
print()
# 함수형 프로그래밍을 이용한 방법
print(datetime.datetime.now())
result = list(map(inc, collection))
print(datetime.datetime.now())
2) filter
- 데이터의 모임에서 함수의 수행결과가 true 인 데이터만 모아서 리턴해주는 함수
- 대입되는 함수는 매개변수를 1개 받아서 bool을 리턴하는 함수이어야 합니다.
def odd(x) :
return x % 2 == 1 # 홀수
li = [23,432,25,34,234,4,123,43,3,2,4,13,23]
print(list(filter(odd, li)))
3) reduce
- 데이터의 모임과 함수를 가지고 누적 연산을 수행해서 결과를 리턴하는 함수
- 결과가 1개
- 대입되는 함수는 매개변수가 2개이고 결과를 리턴하는 함수이어야 한다.
- 매개변수는 처음에는 첫번째와 두번째를 데이터를 가지고 수행 하고 그 다음부터는 앞 연산의 결과를 가지고 다음 데이터와 연산
- python3 에서는 reduce가 내장함수에서 빠지고 functools 패키지의 함수로 변경
7.pass
- 클래스나 함수의 내용을 나중에 작성하고자 할 때 사용하는 예약어
- 내용이 없는 함수나 클래스를 만들 때 사용합니다.
8.doc
- 함수 내부에 doc 속성에 문자열을 대입하면 help(함수) 했을 때 출력이 된다.
- 파이썬이나 R에서 함수를 만들어서 배포하고자 할 때 이 속성에 이 함수의 기능을 설명을 해야 합니다
- 배포할때 필요함. 영어로 작성
변수 < 함수 < 클래스 < 파일(모듈) < 패키지
함수부터를 모듈 프로그래밍 이라고 합니다.
반응형
'Language_Study > Python' 카테고리의 다른 글
[Python] 5.문법-자료형 (0) | 2021.01.19 |
---|---|
[Python] 4.문법-클래스 (0) | 2021.01.19 |
[Python] 2.문법 - 제어문 (0) | 2021.01.19 |
[Python] 1.문법 (0) | 2020.12.23 |
[Python] 0.intro (0) | 2020.12.23 |