소개
Python 의 익명 함수는 lambda 함수라고 불립니다. 이는 이름을 사용하지 않고 함수를 생성하는 방법입니다. 짧고 한 번만 사용되는 함수를 생성하는 데 유용합니다.
This tutorial is from open-source community. Access the source code
Python 의 익명 함수는 lambda 함수라고 불립니다. 이는 이름을 사용하지 않고 함수를 생성하는 방법입니다. 짧고 한 번만 사용되는 함수를 생성하는 데 유용합니다.
리스트는 in-place 방식으로 정렬될 수 있습니다. sort 메서드를 사용합니다.
s = [10,1,7,3]
s.sort() ## s = [1,3,7,10]
역순으로 정렬할 수 있습니다.
s = [10,1,7,3]
s.sort(reverse=True) ## s = [10,7,3,1]
아주 간단해 보입니다. 하지만, 딕셔너리 (dict) 의 리스트는 어떻게 정렬할까요?
[{'name': 'AA', 'price': 32.2, 'shares': 100},
{'name': 'IBM', 'price': 91.1, 'shares': 50},
{'name': 'CAT', 'price': 83.44, 'shares': 150},
{'name': 'MSFT', 'price': 51.23, 'shares': 200},
{'name': 'GE', 'price': 40.37, 'shares': 95},
{'name': 'MSFT', 'price': 65.1, 'shares': 50},
{'name': 'IBM', 'price': 70.44, 'shares': 100}]
어떤 기준에 따라 정렬할까요?
key function을 사용하여 정렬을 안내할 수 있습니다. key function은 딕셔너리를 받아 정렬에 필요한 값을 반환하는 함수입니다.
portfolio = [
{'name': 'AA', 'price': 32.2, 'shares': 100},
{'name': 'IBM', 'price': 91.1, 'shares': 50},
{'name': 'CAT', 'price': 83.44, 'shares': 150},
{'name': 'MSFT', 'price': 51.23, 'shares': 200},
{'name': 'GE', 'price': 40.37, 'shares': 95},
{'name': 'MSFT', 'price': 65.1, 'shares': 50},
{'name': 'IBM', 'price': 70.44, 'shares': 100}
]
def stock_name(s):
return s['name']
portfolio.sort(key=stock_name)
결과는 다음과 같습니다.
## Check how the dictionaries are sorted by the `name` key
[
{'name': 'AA', 'price': 32.2, 'shares': 100},
{'name': 'CAT', 'price': 83.44, 'shares': 150},
{'name': 'GE', 'price': 40.37, 'shares': 95},
{'name': 'IBM', 'price': 91.1, 'shares': 50},
{'name': 'IBM', 'price': 70.44, 'shares': 100},
{'name': 'MSFT', 'price': 51.23, 'shares': 200},
{'name': 'MSFT', 'price': 65.1, 'shares': 50}
]
위의 예에서, key function 은 콜백 함수의 한 예입니다. sort() 메서드는 사용자가 제공하는 함수를 "콜백"합니다. 콜백 함수는 종종 해당 작업에만 사용되는 짧은 한 줄 함수입니다. 프로그래머는 종종 이 추가 처리를 지정하기 위한 단축키를 요구합니다.
함수를 생성하는 대신 람다를 사용하십시오. 이전 정렬 예제에서:
portfolio.sort(key=lambda s: s['name'])
이것은 이름 없는 함수를 생성하여 단일 표현식을 평가합니다. 위의 코드는 초기 코드보다 훨씬 짧습니다.
def stock_name(s):
return s['name']
portfolio.sort(key=stock_name)
## vs lambda
portfolio.sort(key=lambda s: s['name'])
if, while 등과 같은 문 (statement) 은 허용되지 않습니다.sort()와 같은 함수와 함께 사용됩니다.일부 주식 포트폴리오 데이터를 읽고 이를 목록으로 변환합니다:
>>> import report
>>> portfolio = list(report.read_portfolio('portfolio.csv'))
>>> for s in portfolio:
print(s)
Stock('AA', 100, 32.2)
Stock('IBM', 50, 91.1)
Stock('CAT', 150, 83.44)
Stock('MSFT', 200, 51.23)
Stock('GE', 95, 40.37)
Stock('MSFT', 50, 65.1)
Stock('IBM', 100, 70.44)
>>>
다음 문을 시도하여 포트폴리오 데이터를 주식 이름순으로 알파벳순으로 정렬하십시오.
>>> def stock_name(s):
return s.name
>>> portfolio.sort(key=stock_name)
>>> for s in portfolio:
print(s)
... inspect the result ...
>>>
이 부분에서 stock_name() 함수는 portfolio 목록의 단일 항목에서 주식의 이름을 추출합니다. sort()는 이 함수의 결과를 사용하여 비교를 수행합니다.
lambda 표현식을 사용하여 주식 수를 기준으로 포트폴리오를 정렬해 보십시오.
>>> portfolio.sort(key=lambda s: s.shares)
>>> for s in portfolio:
print(s)
... inspect the result ...
>>>
각 주식의 가격에 따라 포트폴리오를 정렬해 보십시오.
>>> portfolio.sort(key=lambda s: s.price)
>>> for s in portfolio:
print(s)
... inspect the result ...
>>>
참고: lambda는 별도의 함수를 먼저 정의할 필요 없이 sort() 호출에서 특수한 처리 함수를 직접 정의할 수 있게 해주므로 유용한 단축키입니다.
축하합니다! 익명 함수와 람다 (Anonymous Functions and Lambda) 랩을 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.