목차
함수
함수 사용방법
- 함수명(입력인수) : 사용하고자 하는 함수를 함수명으로 호출 후 인수가 필요한 함수일 경우 인수값을 사용
수학함수와 python 함수의 비교
- 수학함수 표현
- f(x) = x + 1
- pyhon에서 함수 정의[indent]수행문장
- [indent]return 값
- def 함수명(입력인수):
- def : 함수를 지칭하는 키워드
- 함수명 : 함수를 호출하기 위해 사용하는 명시적 변수
- 입력인수 : 수학 함수식에서 f(x)표현시 함수에 사용되는 x값
- return 값 : 함수를 수행 후 반환되는 값
함수를 만드는 이유
- 함수는 임의의 값을 받아 문장을 수행한 후 결과값을 출력하므로 함수를 이용하면 임의의 값에 대하여 재활용하기 위해 만든다.
함수 모양
def FuncName(var1, var2.. ) :
""" 독스트링(Documentation String,Docstrings)"""
코드
return
- def
- : Define의 약자로써 선언한다는 의미를 가지고 있다.
- funcName
- : 함수의 이름이다.
- var
- 매개변수는 함수에서 선언한 개수와 호출시에 넣은 개수가 동일해야한다
- : 인자값으로써 갯수는 여러개가 들어와도 상관이 없다.
- 독스트링(Documentation String,Docstrings)
- """......""" 이와 같이 """로 묶어서 사용한다.
- 독스트링보다 위에 코드가 있으면 안된다. 즉, 함수의 첫째줄부터 작성되어야한다.
- : 함수의 설명을 작성하는 것이다. (출력과는 무관하다, 주석같은 느낌이다.)
- return
- return 뒤에 값이 없다면 , 그냥 함수를 종료시킨다.
- : return값이 없다면, 적지 않아도 무관하다.
언패킹 이용하기
- 리스트 혹은 튜플 앞에 ''를 삽입하여 사용한다.
- 인자값이 여러개면 언패킹을 이용한다면 편하게 사용 할 수 있다.
- 간단하게 리스트 혹은 튜플이 인자값과 1 : 1 맵핑이 된다고 생각하면된다.
- 그럼으로 리스트 혹은 튜플의 길이가 인자값의 갯수와 동일해야한다.
- Func(*리스트)
- Func(*튜플)
- 가변인수
- def FuncName(*매개변수):
코드
- 가변인수 즉 길이가 변하는 리스트 혹은 튜플따위를 인자값으로 받을 때 사용한다.
- 가변인수와 고정인수를 동시에 사용한다면, 고정인수, 가변인수 순으로 사용해야한다.
- def FuncName(고정인수 , *가변인수):
- 위치 인수
- def FuncName(**매개변수):
코드
- Func(**딕셔너리)
- *_를 두번 하는 이유는 *한번만 사용하면 key값을 반환하고, *_을 사용하면 value를 반환한다.
- 초기값 설정
- def FuncName(매개변수 = value) :
- 위와같이 선언한다면, 매개변수의 Default 값이 value가 들어간다.
- 초기값을 설정한 변수들의 순서는 뒤로가야한다.
- def FuncName(var1 , var2 = value): <- 가능
- def FuncName(var1 = value , var2): <- 불가능
- def FuncName(매개변수 = value) :
- 인자값이 여러개면 언패킹을 이용한다면 편하게 사용 할 수 있다.
- *
재귀함수
- 정의
- 함수가 자기자신을 다시 호출하는 것이다.
- 생성시에 탈출조건을 잘 정해줘야한다.
- 탈출조건을 잘못 설정하면 무한루프가 된다.(프로그램이 끝나지 않음)
- 모양
- def recursiveFunc() :
코드
recursiveFunc()
람다식
- 람다식 ( 익명 함수 ) 이란?
- 함수를 간단히 식 형태로 되어있어 람다 표현식 ( lambda expression ) 이라고 부른다.
- 즉 return문하나 만 있는 함수라고 생각하면 편하다.
- 람다식 안에서 새로운 변수생성 은 불가하다.
- 람다식 외부에 있는 변수는 사용할 수 있다.
- 주로 함수의 인수로 넣을떄 사용한다.
- 아래 함수와 람다식은 같은 기능을 처리한다.
def plus(x):
return x+1
lambda x : x + 1
결과값 : <function main.(x)>
사용방법
- lambda 매개변수 : 식
- 람다식을 변수에 할당시키면 재사용이 가능하다
- LambdaVar = Lambda(람다식)
(lambda x : x +1)(1)
결과값 : 2
Sequence Type 사용하기
- (lambda 매개변수 : 식)(인수들)
- 변수에 할당하지 않고 바로 사용시에 사용한다.
- 한줄 계산시에 많이 사용한다.
- 만약 인수를 list와 같은 Sequence Types으로 받는다면, 각각에 값처리가 된다.
print(list( map (plus,[1,2,3]))) # plus는 위에 함수로 선언함.
print(list( map ( lambda x : x + 1 ,[1,2,3] ) ))
결과값 : [2, 3, 4], [2, 3, 4]
람다에 조건문 삽입하기
- lambda 매개변수 : 식1 if 조건식 else 식2
- 조건식이 True면 식1, False면 식2를 반환한다.
- IF를 사용하였다면 반드시 ELSE를 사용해야한다
nums = [1,2,3,4,5,6,7,8,9,10]
list(map(lambda x : -1 if x % 2 else x , nums))
결과값 : [-1, 2, -1, 4, -1, 6, -1, 8, -1, 10]
조건문 안에 조건문 넣기
- lambda 매개변수 : 식1 if 조건식1 else 식2 if 조건식2 else 식3
- 조건식이 True면 식1, False면 식2를 반환한다.
- 물론 이렇게 사용 할 수 있지만, 억지로 람다식을 구현한 느낌이다. 가독성이 떨어짐으로 Def를 이용하여 함수를 생성하여 사용하는 것을 권장한다.
nums = [1,2,3,4,5,6,7,8,9,10]
list(map(lambda x : '식1' if x % 3 == 0 else '식2' if x % 2== 0 else '식3' , nums))
결과값 : ['식3', '식2', '식1', '식2', '식3', '식1', '식3', '식2', '식1', '식2']
Map을 이용하여 Lambda사용하기
- list(map(lambda x,y : x*y , 인자1,인자2)
a = [1,2]
b = [2,3]
list(map(lambda x,y : x*y , a,b))
결과값 : [2, 6]
Filter을 이용하여 Lambda 사용하기
- filter(함수, 반복가능한객체)
- 함수가 True일 떄 객채를 가져온다.
a = [1,2,3,4,5,6,7,8,9,10]
list(filter(lambda x : x > 5 and x < 10 , a))
결과값 : [6, 7, 8, 9]
'프로그래밍 및 IT > 파이썬 ( Python )' 카테고리의 다른 글
파이썬( 예외 처리 )_11 (0) | 2021.05.14 |
---|---|
파이썬( 클래스 )_10 (0) | 2021.05.12 |
파이썬(파일 입출력)_08 (0) | 2021.05.02 |
파이썬(문자열)_07 (0) | 2021.04.30 |
파이썬(반복문)_06 (0) | 2021.04.29 |