reduce 함수는 첫 인수로 함수를 받는다. 이 함수는 두 개의 인수를 받아야 한다.

reduce 함수의 두 번째 인수는 시퀀스 형이어야 한다. 시퀀스의 자료들은 순처적으로 reduce 함수의 첫 번째 인수인 함수의 두 번째 인수로 전달된다. 

첫 인수는 함수의 계산 결과가 누적적으로 적용된다. 단 처음 계산에서는 시퀀스의 두 개의 소가 함수에 전달된다.



맨 첫 번째는 다음과 같다. 

((((1+2)+3)+4)+5)


reduce 함수에 세 번째 인수를 부여할 수 있는데, 초기 값으로 사용된다.

즉, 처음 계산할 때 초기 값이 x로 전달되고 리스트에서 한 개의 값이 y로 전달된다.

(((((0+1)+2)+3)+4)+5)


마지막은 수학식으로 표현하면 이렇게 된다.


Posted by scii
:


filter 내장 함수는 주어진 시퀀스 자료 중에서 아이템들을 필터링하여 참인 요소만 모아 출력한다.

두 개의 인수를 가지며 첫 인수는 (map 함수와 같이) 함수이고, 두 번째 인수는 시퀀스 자료형이다.


ex) 2보다 큰 값 리턴, 홀수만 리턴, 짝수만 리턴


조건식이 복잡하다면 별도의 함수를 만들어야 할 것이다. 하지만 이러한 전통적인 방식의 코딩보다는 filter 함수를 사용함으로써 얻어지는 간결함과 이해도의 증가는 코딩을 하는 데 많은 이익을 준다.


filter 함수의 또 다른 이득은 여러 자료형에 대해서 같은 자료형의 결과를 넘겨준다는 것이다.



또 다른 유용한 활용 예는 다음과 같이 리스트에서 별 의미 없는 값을 삭제하는 것이다.


filter의 첫 인수로 None을 사용하면 입력 값을 진리 값을 판별하는 데 그대로 사용한다.


Posted by scii
:


map 내장 함수

사상 함수 map은 입력 집합(X)과 사상 함수(f)가 주어져 있을 때, Y = f(X) 를 구한다.

map은 두 개 이상의 인수를 받는다 첫 인수는 함수(f)이며 두 번째부터는 입력 집합(X)인 시퀀스 자료형(문자열, 리스트, 튜플 등) 이어야 한다.를

첫 인수인 함수는 입력 집합 수만큼의 인수를 받는다.


ex)


map 함수의 첫 번째 인수는 함수(f)이고, 두 번째 인수는 리스트이다. 

두 번째 인수의 모든 아이템들은 첫 인수의 함수 f에 적용되고 결과로 리스트를 리턴한다.


map 함수는 간결하면서도 이해하기 쉬운 코드를 생성하게 한다. 개개의 요소를 다루지 않지만...

Y = map(f, X) 는 집합 X에 함수 f를 적용한 결과 Y를 구한다는 의미가 명확하다.

실행 효율면에서도 일반 for를 쓰는 것보다 앞선다. 따라서 가능하면 이러한 방식의 코딩을 많이 하는 것이 좋은 방법이다.


람다 함수를 이용한 map 함수:

X = [1,2,3,4,5]

Y = map(lambda a: a*a, X)

함수를 재사용하지 않을 경우에는 이렇게 간단하게 람다 함수를 이용하는 것이 간편하다.


map 함수는 입력을 두 개 이상도 받는다.


이 때는 함수도 입력 집합 수에 맞추어서 인수를 받아야 한다.

만일, map에 넘겨주는 함수가 이미 파이썬에서 정의한 연산일 경우에는 operator 모듈을 이용할 수 있다.


순서 쌍 만들기

map 함수는 순서쌍을 만드는 데도 사용딘다. 이를 위해서는 첫 인수로 None을 넘겨주어야 한다.


여기서 함수 객체 None의 의미는 입력받는 값을 그대로 전달하는 함수로 생각할 수 있다.


※ 순서 쌍을 만들 때, map과 zip의 차이점:

map은 길이가 다를 때 None을 추가하지만, zip은 짧은 인수를 기준으로 나머지는 버린다.


Posted by scii
:


람다 함수는 이름이 없는 한 줄짜리 함수이다. 


lambda 콤마로 구분된 인수들 : 식


받는 인수가 없고 언제나 1을 리턴하는 람다 함수는 다음과 같다.

lambda : 1


람다 함수는 값을 리턴하기 위하여 return 문을 사용하지 않는다. 

람다 함수의 몸체는 문이 아닌 하나의 식이어야 한다.

람다 함수는 함수 레퍼런스를 리턴한다.

람다 함수도 디폴트 값과 가변 인수를 지정할 수 있다. ex) lambda x, *args : args


람다 함수는 주로 함수를 인수로 넘겨주어야 하는 경우에 편리하게 사용된다.



함수 def로 구현한다면, 함수를 정의하고 나서 함수를 인수로 전달할 수 있지만 람다 함수는 정의하는 즉시 인수로 전달이 된다.

이와 같은 차이는 문(statement)과 식(expression)에서 온다. 문은 if, for while, class, def 등과 같이 파이썬적 문장을 구선한다. 문은 리턴값이 없으며, 식의 일부분으로 사용될 수 없다. def는 문으로 함수를 정의한다.

식은 결과 값이 존재하며 다른 식의 일부로 사용될 수 있다. 람다 함수는 식이다. 따라서, 정의와 함께 함수 인수로 전달하는 것이 가능하다.


'Programming > Python' 카테고리의 다른 글

함수적 프로그래밍 - filter 내장 함수  (0) 2013.04.28
함수적 프로그래밍 - map 내장 함수  (0) 2013.04.28
튜플 인수와 사전 인수로 함수 호출  (0) 2013.04.28
가변 인수  (0) 2013.04.28
키워드 인수  (0) 2013.04.27
Posted by scii
:

만일 함수 호출에 사용될 인수들이 튜플에 있다면, "*" 를 이용하여 함수 호출이 가능하다.

만일 함수 호출에 사용될 인수들이 사전에 있다면, "**" 를 이용하여 함수 호출이 가능하다.

튜플 인수와 사전 인수를 함께 사용할 수도 있다.




'Programming > Python' 카테고리의 다른 글

함수적 프로그래밍 - map 내장 함수  (0) 2013.04.28
람다 함수 (lambda function)  (0) 2013.04.28
가변 인수  (0) 2013.04.28
키워드 인수  (0) 2013.04.27
함수의 중첩 영역  (0) 2013.04.27
Posted by scii
:

가변 인수

Programming/Python 2013. 4. 28. 01:04 |


고정되지 않은 수의 인수를 함수에 전달하는 방법이 있다. 함수를 정의할 때, 인수 리스트에 반드시 넘겨야 하는 고정 인수들을 우선 나열하고, 나머지를 튜플 형식으로 한꺼번에 받는다.



이것을 이용하면, 파이썬으로 C언어의 printf 문을 그대로 흉내 낼 수 있다.



'Programming > Python' 카테고리의 다른 글

람다 함수 (lambda function)  (0) 2013.04.28
튜플 인수와 사전 인수로 함수 호출  (0) 2013.04.28
키워드 인수  (0) 2013.04.27
함수의 중첩 영역  (0) 2013.04.27
[File I/O] 지속 모듈  (0) 2013.04.14
Posted by scii
:

키워드 인수

Programming/Python 2013. 4. 27. 21:28 |


함수 호출에서 키워드 인수란, 

인수 이름으로 값을 전달하는 방식이다.



일반적으로 함수 호출을 할 때 키워드 인수의 위치는 위치 인수(보통의 인수) 이후에 위치한다.


예를 들면, 다음은 가능하다.

area(20, width=5)


키워드 인수 전까지는 순서에 의한 인수 매칭을 한다. 그러나 다음은 가능하지 않다.

area(width=5, 20)

키워드 인수 이후에 순서에 의한 인수매칭을 할 수는 없다.


'Programming > Python' 카테고리의 다른 글

튜플 인수와 사전 인수로 함수 호출  (0) 2013.04.28
가변 인수  (0) 2013.04.28
함수의 중첩 영역  (0) 2013.04.27
[File I/O] 지속 모듈  (0) 2013.04.14
표준 입/출력 방향 전환  (0) 2013.04.13
Posted by scii
:


함수 안에 함수가 정의되어 있는 경우 "중첩 영역(Nested Scopes)이 발생한다.

이 경우, 가장 안쪽의 영역부터 바깥쪽의 영역 쪽으로 변수명을 탐색하며, 먼저 발견되는 변수의 값을 취한다.


init[0]은 변수를 새로 생성하는 것이 아니고 참조하는 것이므로...



'Programming > Python' 카테고리의 다른 글

가변 인수  (0) 2013.04.28
키워드 인수  (0) 2013.04.27
[File I/O] 지속 모듈  (0) 2013.04.14
표준 입/출력 방향 전환  (0) 2013.04.13
파일 입/출력 예제  (0) 2013.03.12
Posted by scii
: