728x90
반응형
32. 람다 표현식(lambda expression)
32.1 람다 표현식 함수
def plus_ten(x):
return x + 10
print(plus_ten(1))
11
print(lambda x: x + 10)
<function <lambda> at 0x1022cc310>
plus_lambda = lambda x: x + 10
# PEP 8: E731 do not assign a lambda expression, use a def
# PEP : Python Enhancement Proposal 파이선 가이드
# PEP 8부터 lambda라는 명칭대신에 def(함수)로 정의하도록 권장
print(plus_lambda(1))
11
# 람다 표현식 안에서는 변수를 만들 수 없다
# print(lambda x:y=10; x+y)(1)
# SyntaxError: invalid syntax
# 람다 표현식 바깥에 있는 변수 사용 가능
y = 10
print((lambda x: x + y)(1))
11
# 람다 표현식을 인수로 사용
def plus_ten(x):
return x + 10
result = list(map(plus_ten, [1, 2, 3]))
print(result)
[11, 12, 13]
result = list(map(lambda x: x + 10, [1, 2, 3]))
print(result)
[11, 12, 13]
# 람다 표현식으로 매개변수가 없는 함수 만들기
print((lambda :1)())
1
x = 1
print((lambda :x)())
1
32.2 람다 표현식과 map, filter, reduce 함수 활용
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(list(map(lambda x: str(x) if x % 3 == 0 else x, a)))
# 람다표현식에서 if를 사용했다면 반드시 else를 사용해야한다. or 문법 에러
[1, 2, '3', 4, 5, '6', 7, 8, '9', 10]
# 복잡해지는 경우 def 함수 권장
example1 = list(map(lambda x: str(x) if x == 1 else float(x) if x == 2 else x + 10, a))
print(example1)
['1', 2.0, 13, 14, 15, 16, 17, 18, 19, 20]
# map에 객체 여러개 넣기
a = [1, 2, 3, 4, 5]
b = [2, 4, 6, 8, 10]
example2 = list(map(lambda x, y: x * y, a, b))
print(example2)
[2, 8, 18, 32, 50]
# filter 사용
def f(x):
return x > 5 and x < 10 # 5 < x < 10
a = [8, 3, 2, 10, 15, 7, 1, 9, 0, 11]
example3 = list(filter(f, a))
print(example3)
[8, 7, 9]
example4 = list(filter(lambda x: 5 < x < 10, a))
print(example4)
[8, 7, 9]
# reduce
# 반복 가능한 객체의 각 요소를 지정된 함수로 처리한 뒤 이전 결과와 누적해서 반환하는 함수
# python3부터 내장함수가 아니라서 import 해야함
def f(x, y):
return x + y
a = [1, 2, 3, 4, 5]
print(reduce(f, a))
print(reduce(lambda x, y: x + y, a))
15
15
# 리스트 활용
example5 = [i for i in a if 5 < i < 10]
print(example5)
[8, 7, 9]
32.4 연습문제 : 이미지 파일만 가져오기
files = ['font', '1.png', '10.jpg', '2.jpg', '3.png', 'table.xslx', 'spec.docx']
print(list(filter(lambda x:x.find('.jpg') != -1 or x.find('.png') != -1, files)))
==========================
['1.png', '10.jpg', '2.jpg', '3.png']
32.5 심사문제 : 파일 이름을 한꺼번에 바꾸기
x = ['11.jpg', '200.png', '3.png']
x = list(input().split())
new = []
for i in x:
trans = i.split('.')
a, b = trans[0], trans[1]
if 0 <= len(a) <= 1:
a = '00' + a
elif 1 < len(a) <= 2:
a = '0' + a
new.append(a + '.' + b)
print(new)
==========================
1.jpg 20.png 100.jpg(입력)
['001.jpg', '020.png', '100.jpg']
728x90
반응형
'Language > Python' 카테고리의 다른 글
[코딩도장]34.클래스 (0) | 2022.03.28 |
---|---|
[코딩도장]33.클로저 (0) | 2022.03.26 |
[코딩도장]31.재귀호출 (0) | 2022.03.26 |
[코딩도장]30. 위치 인수와 키워드 인수 사용 (0) | 2022.03.25 |
[코딩도장]29. 함수 사용 (0) | 2022.03.24 |