함수 인수값 전달방법
def f4(b): b[1] = 10 a = [4,5,6] f4(a) print a
// 결과값
[4, 10, 6]
def f5(b): b['a'] = 10 a = {'a':1, 'b':2} f5(a) print a
// 결과값
{'a' : 10, 'b' : 2}
함수 인수 처리
● 기본 인수 값 : 함수를 호출할 때 인수를 넘겨주지 않아도 인수가 기본적으로 가지는 값
def incr(a, step = 1): return a + step b = 1 b = incr(b) print b b = incr(b, 10) print b
// 결과값
2
12
--> 에러가 발생하는 이유 : 기본인자가 없으면 error가 발생한다. 왜냐하면 정의한 함수의 인자가 2개이기 때문이다.
※ 문제
이 코드에서 에러가 발생하는 이유를 적어라.
def incr(step = 1, a): return a + step b = 1 b = incr(b) print b b = incr(b, 10) print b
함수를 정의할 때 기본 값을 지닌 인수 뒤에 일반적인 인수가 올 수 없다. 하지만 위 코드를 보게되면 incr(step = 1, a)라고 적혀있다. 그러므로 이 코드는 잘못된 코드이고 실행하게 되면 에러가 난다.
람다 함수
incr = lambda x, inc = 1:x + inc print incr(10) print incr(10, 5)
// 결과값
11
15
def g(func): return [func(x) for x in range(-10, 10)] print g(lambda x: x * x + 3 * x - 10) print g(lambda x: x*x*x)
// 결과값
[60, 44, 30, 18, 8, 0, -6, -10, -12, -12, -10, -6, 0, 8, 18, 30, 44, 60, 78, 98] [-1000, -729, -512, -343, -216, -125, -64, -27, -8, -1, 0, 1, 8, 27, 64, 125, 216, 343, 512, 729]
func = [lambda x, y: x + y, lambda x, y: x - y, lambda x, y: x * y, lambda x, y : x/y] def menu(): print "0. add" print "1. sub" print "2. mul" print "3. div" print "4. quit" return input("Select menu : ") while 1: sel = menu() if sel < 0 or sel > len(func): continue if sel == len(func): break x = input("First operand : ") y = input("Second operand : ") print "Result = ", func[sel](x, y)
Filter 내장 함수
● filter(function, seq)
- seq 시퀀스 자료형이 지닌 각 원소값들에 대해 function에 적용한 결과가 참인 원소값들만을 동일 시퀀스
자료형으로 반환한다.
print filter(lambda x: x > 2, [1, 2, 3, 4])
// 결과값
[3, 4]
● 주어진 시퀀스 내에 있는 정수 중 홀수만 필터링
print filter(lambda x : x % 2, [1,2,3,4,5,6])
// 결과값
[1, 3, 5]
● 주어진 시퀀스 내에 있는 정수 중 짝수만 필터링
print filter(lambda x : x % 2 - 1, [1,2,3,4,5,6])
// 결과값
[2, 4, 6]
- 1 % 2 = 나머지가 1 --> true
- 2 % 2 = 나머지가 0 --> false
reduce 내장 함수
● reduce(function, seq[, initial])
- seq 시퀀스 자료형이 지닌 원소값들에 대해 function 함수를 적용하면서 하나의 값으로 매핑한다.
- 첫 번째 인자인 function 함수는 반드시 두 개의 인자 (예를 들어, x, y)를 받아야 한다.
- 추가적으로 제공가능한 세번째 인자인 initial은 첫번째 단계에 x에 할당할 초기값으로 사용된다.
print reduce(lambda x, y : x + y, [1,2,3,4,5])
// 결과값
15
- 세번째 인자 있는 경우
print reduce(lambda x, y : x + y, [1,2,3,4,5], 100)
// 결과값
115
print reduce(lambda x, y : x + y, range(1, 11), 0)
// 결과값
55
print reduce(lambda x, y : y + x, 'abcde')
// 결과값
edcba
'Programming > Python' 카테고리의 다른 글
[python]보안프로그래밍3 기말고사 정리(5) (0) | 2017.06.14 |
---|---|
[python] 보안프로그래밍3 기말고사 정리(4) (0) | 2017.06.14 |
[python] 보안프로그래밍3 기말고사 정리(2) (0) | 2017.06.14 |
[python] 보안프로그래밍3 기말고사 정리(1) (0) | 2017.06.13 |
[python] 보안프로그래밍3 중간고사 정리 (5) (2) | 2017.04.25 |
댓글