Archive

[파이썬 기초] 익명함수 본문

공부/Python

[파이썬 기초] 익명함수

mariabeetle 2017. 10. 2. 12:25

1. 함수 오브젝트

- 함수도  오브젝트이다.

- 함수를 변수에 대입하거나, 다른 함수의 인자로 지정할 수 있으며, 반환값으로도 사용할 수 있다.

1
2
3
4
5
6
7
# 함수를 변수에 
def mul_func(a, b):
    return a*b
# 함수를 변수에 대입.
func = mul_func
# 대입한 변수를 함수처럼 사용한다.
print(func(23))
cs

1
2
3
4
5
6
7
8
9
10
11
12
# 함수를 함수의 인자로 지정하기
 
def mul_func(a, b) : return a*b
 
# 인수로 받은 함수를 5, 3 인자를 줘 리턴하는 함수.
def calc_5_3(func):
    return func(53)
 
# mul_func(5, 3)과 같은 결과
print(calc_5_3(mul_func))
 
# 15

cs


2. 익명함수

- 람다 이용하기

v = lambda 인수1, 인수2, 인수3, ... : 식

- 람다식의 반환값은 함수 오브젝트가 된다.

1
2
3
x2 = lambda x: x*2
x2(2)
# 4
3.cs


3. map()과 filter()

- 람다를 많이 쓰는곳은 함수 오브젝트를 인수로 받는 함수를 작성할 때다.

- 리스트 각 요소를 처리할 때 map과 filter를 쓰고, 이때 람다식을 많이 사용한다.

- map

map( function, iterable, ... )

# function에는 함수 오브젝트를, iterable에는 여러 값을 가진 리스트나 튜플 데이터형을 넣어준다.

# function을 iterable 각 요소에 적용하고 결과를 반환한다.

1
2
3
4
5
6
7
8
nums = [13579]
x2 = lambda x : x * 2
list(map(x2, nums))
 
# [2, 6, 10, 14, 18]
 
list(map( lambda x : x * 3, nums ))
# [3, 9, 15, 21, 27]
-cs

- filter

filter( function, iterable )

# function에는 함수 오브젝트를, iterable에는 리스트나 튜플 데이터형을 넣어준다.

# function을 iterable 모든 요소에 적용하고 결과가 True인 요소들만 반환한다.

1
2
3
nums = [12467]
list(filter(labmda x : (x%2)==0, nums )
#[2, 4, 6]
cs


3. sorted()

sorted ( iterable[,key], [,reverse])

# iterable은 리스트나 튜플과 같은 자료형을, key에는 익명 함수를, 세 번째 reverse에는 True나 False를 넘겨준다.

# default로 오름차순으로 나열하지만, True를 넘겨주면 내림차순으로 나열한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 튜플 리스트 정렬하기
animal_list = [
    ("사자"58),
    ("치타"110),
    ("얼룩말"60),
    ("순록"80),
]
 
faster_list = sorted(
    animal_list,
    # (동물이름, 속도) 중에서 속도를 기준으로 정렬하겠다는 의미이다. ( key )
    key = lambda ani : ani[1],
    # 내림차순으로 정렬하겠다는걸 의미한다.
    reverse = True
)
 
for i in faster_list : print(i)
 
# ('치타', 110)
# ('순록', 80)
# ('얼룩말', 60)
# ('사자', 58)
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# dictionary 정렬하기
animal_dict = {
    "사자"58,
    "치타"110,
    "얼룩말"60,
    "순록"80
}
 
li = sorted(
    # dictionary데이터에 items()메서드를 실행하면 튜플 리스트로 변환된다.
    animal_dict.items(),
    key = lambda x : x[1],
    reverse = True
)
 
for name, speed in li:
    print(name, speed)
 
# 치타 110
# 순록 80
# 얼룩말 60
# 사자 58
 
cs


Comments