2022. 08. 08(월) Python 공부 11일차

Dylan·2022년 8월 8일
0
post-thumbnail

함수의 이해 및 사용 (Lambda 함수의 이해)

Lambda 함수 이해 및 사용

  • Lambda 함수
    • 단일문으로 표현되는 익명 함수
    • 익명함수란 이름이 없는 구현체만 존재하는 간단한 함수를 의미
    • 코드 상에서 한번만 사용되는 기능이 있을 때, 굳이 함수로 만들지 않고 1회성으로 만들어서 쓸 때 사용
#### Lambda 함수

# 이 함수를 한 줄로 쓰는게 Lambda 함수이다. 중요한건 return을 쓰면 안된다.
def square2(x):
    return x ** 2


square = lambda x: x ** 2
print(square(5))  # 25


# 파라미터가 2개 일 때
def add(x, y):
    return x + y


add2 = lambda x, y: x + y
print(add2(10, 20))  # 30


# 문자열 길이에 따라 정렬하고 싶을 때
def str_len(s):
    return len(s)


strings = ['bob', 'charles', 'alexander3', 'teddy']
# 기본적인 sort는 알파벳순서로 정렬을 하는데 key 파라미터를 이용하면 원하는 형태로 정렬이 가능하다.
# strings.sort(key=str_len)
# 함수를 생성해서 파라미터로 넣어도 되지만 람다함수를 이용하면 바로 간단하게 넣을 수 있다.
strings.sort(key=lambda s: len(s))

print(strings)

filter, map, reduce

  • lambda가 유용하게 사용되는 3가지 대표적 함수
  • 함수형 프로그래밍의 기본 요소이기도 함
  • filter : 특정 조건을 만족하는 요소만 남기고 필터링
  • map : 각 원소를 주어진 수식에 따라 변형하여 새로운 리스트를 반환
  • reduce : 차례대로 앞 2개의 원소를 가지고 연산. 연산의 결과가 또 다음 연산의 입력으로 진행됨. 따라서 마지막까지 진행되면 최종 출력은 한개의 값만 남게 됨.
#### filter, map, reduce
# filter(함수, 리스트)
def even(n):
    return n % 2 == 0


nums = [1, 2, 3, 6, 8, 9, 10, 11, 13, 15]

# print(list(filter(even, nums)))  # [2, 6, 8, 10] ## 람다 함수를 안썼을 때
print(list(filter(lambda n: n % 2 == 0, nums)))  # [2, 6, 8, 10]

# map(함수, 리스트)
# 주어진 리스트, 리스트의 제곱을 한 숫자로 새로운 리스트
nums = [1, 2, 3, 6, 8, 9, 10, 11, 13, 15]
print(list(map(lambda n: n ** 2, nums)))  # [1, 4, 9, 36, 64, 81, 100, 121, 169, 225]

# reduce

import functools

# functools.reduce(함수, 리스트)
a = [1, 3, 5, 8]

print(functools.reduce(lambda x, y: x + y, a))  # 리스트 내의 모든 수의 합 # 17
print(functools.reduce(lambda x, y: x * y, a))  # 리스트 내의 모든 수의 곱 # 120

함수 연습문제

    1. 주어진 숫자 리스트의 평균을 구하는 함수를 출력하시오
    1. 해당 숫자가 소수인지 아닌지 판별하시오.
    1. 2부터 해당 숫자사이에 소수가 몇개인지 출력하는 함수를 구하시오
#### 함수 연습문제
# 1. 주어진 숫자 리스트의 평균을 구하는 함수를 출력하시오
# 입력: 숫자 리스트
# 출력: 숫자 리스트의 평균값

def mean(nums):
    _sum = 0
    for i in nums:
        _sum += i
    return _sum / len(nums)


def mean2(nums):
    # sum 내장 함수로 대체 가능
    # _sum = 0
    # for i in nums:
    #    _sum += i
    return sum(nums) / len(nums)


print(mean([1, 2, 3]))  # 2.0
print(mean2([1, 2, 3, 4, 5]))  # 3.0
print(mean([1, 2, 3.0, 3.9, 8.7]))  # 3.72


# 2. 해당 숫자가 소수인지 아닌지 판별하시오.
# 소수 판별 (1과 자기 자신으로만 나눠지는 수)
# 입력: 양의 정수 1개
# 출력: boolean (소수: True, 합성수: False)

# 관례 : 함수에서 True, False를 반환시킬땐 변수명 앞에 is_를 붙힌다.
def is_prime(num):
    for i in range(2, num):
        if num % i == 0:
            return False
    return True


print(is_prime(89))  # True 소수
print(is_prime(100))  # False 합성수


# 3. 2부터 해당 숫자사이에 소수가 몇개인지 출력하는 함수를 구하시오
# 2, 3, 4, 5, 6, 7 -> 4
# 2, 3, 4, 5 -> 3
# 입력: 양의 정수 1개
# 출력: 2 ~ 해당 숫자 사이의 소수의 개수

def num_prime(num):
    count = 0
    for i in range(2, num + 1):
        if is_prime(i):
            count += 1
    return count


print(num_prime(7))     # 4
print(num_prime(5))     # 3
print(num_prime(100))   # 25

파이썬 모듈

모듈의 이해 및 사용과 import 방법

모듈 임포트

  • 그동안 사용했던 함수들 처럼, 다양한 기능들이 미리 함수로 구현되어 모듈 형태로 제공
  • 대표적으로 추후 과정에서 사용하게 될 아래의 모듈들이 존재
  • requests - HTTP 요청/응답 모듈
  • numpy - 수치해석 모듈
  • pandas - 데이터 분석 모듈

import

  • import를 사용하여 해당 모듈 전체를 import
#### import
# import를 사용하여 해당 모듈 전체를 import
import math

print(math.pi)
print(math.cos(100))

from import

  • 해당 모듈에서 특정한 타입만 import
#### from import
# 해당 모듈에서 특정한 타입만 import
from math import pi
from math import cos
print(pi)
print(cos(100))

* 임포트

  • 해당 모듈내에 정의된 모든 것을 import
  • 일반적으로 사용이 권장되지 않음
#### * 임포트
# 해당 모듈내에 정의된 모든 것을 import
# 일반적으로 사용이 권장되지 않음
from math import *
print(sin(100))
print(e)

as

  • 모듈 import 시, alias(별명) 지정가능
#### as
# 모듈 import 시, alias(별명) 지정가능
import math as m
print(m.exp(3))
print(m.cos(100))

0개의 댓글