파이썬 | 다양한 내장 함수들

Jihun Kim·2021년 8월 31일
0

파이썬

목록 보기
3/11
post-thumbnail

🥊 lambda

  • 한 번만 사용하는 함수를 '간결하게' 사용할 수 있도록 만든다.

[예시]

def squre(x):
	return x ** 2
   
square = lambda x: x ** 2

[다른 예시]

def get_eng_title(row):
	split = row.split(',')
    return split[1]

get_eng_title = lambda row: row.split(',')[1]
sorted(movies, key=get_eng_title)

# 아래와 같이 짧게 줄일 수도 있다.
sorted(movies, key=lambda row: row.split(',')[1])

assert()

  • 인자로 True or False가 들어간다.
  • True면 그냥 통과되지만 False면 오류가 난다.

🏓 함수를 리턴하는 함수

  • 대표적으로 'itemgetter(n)'가 있다.
    👉 데이터의 모음을 받아 n번째 원소를 리턴하는 함수
>>> from operator import itemgetter
>>> get_zeroth = itemgetter(0)
>>> numbers = [1, 2, 3]
>>> print(get_zeroth(numbers))
1
  • 아래와 같이 'adder' 함수는 'helper' 함수를 리턴하는 함수로, 'helper' 함수는 받은 인자 값에 대해, 해당 인자 값만큼의 수를 더해주는 함수이다.
def adder(n):
    def helper(x):
        return x + n
    return helper

add_three = adder(3)
print(add_three(6)) # 9

👉 "Validator"를 만들 때 유용하다.

def min_validator(minimum):
    def helper(n):
        if type(n) is not int:
            return False
        return minimum <= n
    
    return helper
 
 def validate(n, validators):
    # validator 중 하나라도 통과하지 못하면 False를 리턴
    for validator in validators:
        if not validator(n):
            return False
    
    return True
    
age_validators = [min_validator(0), min_validator(120)]
ages = [9, -3, 7, 33, 18, 1999, 287, 0, 13]

for age in ages:
    result = "유효함" if validate(age, age_validators) else "유효하지 않음"

🥎 map

  • 각 원소를 특정 조건을 적용하여 '추려낸' 값을 map type object로 저장해 반환하는 함수
def get_eng_title(row):
	split = row.split(',')
    return split[1]

eng_titles = map(get_eng_title, movies)
  • 아래와 같이 lambda 함수를 이용해서 간단하게 만든다.
eng_titles = map(
    lambda row: row.split(',')[1],
    movies
)
rader = csv.reader(books, delimiter=',')
get_title = lambda row: row[0]
titles = map(get_title, reader)  # reader의 0번째 인덱스 값만 가져온다.
print(list(titles))  # map 객체를 list로 출력한다.

🏒 filter

  • 특정 조건을 만족하는 원소만 골라내 filter type object로 저장해 반환한다.
  • map과 유사하지만, 조건이 '참'인지 '거짓'인지에 따라 반환 여부가 결정된다는 점이 다르다.
  • 값이 true일 때 해당하는 값들을 모아준다.
def starts_with_r(word):
    return word.startswith('r')

words = ['real', 'man', 'rythm']
r_words = filter(starts_with_r, words)
# list로 형 변환을 해야 리스트 형태로 출력이 가능하다.

[연습하기]

reader = csv.reader(books, delimiter=',')
is_long = lambda row: int(row[3]) > 150
get_title = lambda row: row[0]
        
long_books = filter(is_long, reader)
# long_books가 filter object인데 list로 변환하지 않아도 map 함수의 두 번째 인자로 들어가는 것이 가능하다.
long_book_titles = map(get_title, long_books)
        
print(list(long_book_titles))

🐧 이 글은 엘리스 AI 트랙 과정 중 '실전 데이터 분석' 강의 내용을 바탕으로 작성 되었습니다.

profile
쿄쿄

0개의 댓글