Asterisk(*)

  • 단순 곱셈, 제곱 연산, 가변 인자(여러 개 값들을 한 번에 받을 수 있음)등 다양하게 사용됨
  • tuple, dict 등의 자료형에 들어가 있는 값을 unpacking 하기 편리함
  • 함수의 입력값, zip 등에 유용하게 사용가능

 

Ex 1) 가변 인자 사용 예

  • a = 1, *args = (2, 3, 4, 5, 6)
  • 가변 인자는 Tuple 형태
def asterisk_test(a, *args):
    print(a, args)
    print(type(args))
    
asterisk_test(1, 2, 3, 4, 5, 6)

1 (2, 3, 4, 5, 6)

<class 'tuple'>

 

 

Ex 2) 키워드 인자 사용 예

  • a = 1, **kargs = {'b':2, 'c':3, 'd':4, 'e':5, 'f':6}
  • 키워드 인자는 Dict 형태
def asterisk_test(a, **kargs):
    print(a, kargs)
    print(type(kargs))
    
asterisk_test(1, b=2, c=3, d=4, e=5, f=6)

1 {'b':2, 'c':3, 'd':4, 'e':5, 'f':6}

<class 'dict'>

 

 

Ex 3) unpacking 예 

  • 함수 선언의 args는 하나의 tuple을 받음
  • 이것을 *args를 하여 unpacking 
def asterisk_test(a, args):
    print(a, *args)
    print(type(args))
    
asterisk_test(1, (2,3,4,5,6))

1 2 3 4 5 6     (unpacking 된 결과)

<class 'tuple'>

 

 

Ex 3-1) unpacking 예 2

a, b, c = ([1, 2], [3, 4], [5, 6])
print(a, b, c)

data = ([1, 2], [3, 4], [5, 6])
print(*data)

[1, 2], [3, 4], [5, 6]

[1, 2], [3, 4], [5, 6]

 

 

Ex 3-2) unpacking 예 3

def asterisk_test(a, b, c, d, e):
    print(a, b, c, d, e)
    
data = {"d":1, "c":2, "b":3, "e":56}
asterisk_test(10, **data)

10 3 2 1 56

 

 

Ex 3-3) unpacking 예 4

for data in zip(*([1, 2], [3, 4], [5, 6])):
    print(sum(data))

9    (1 + 3+ 5)

12    (2+ 4 + 6)

 

'✍🏻Language & FrameWork > Python' 카테고리의 다른 글

[Python for ML] News Categorization  (0) 2024.01.02
[Python for ML] Linear Algebra Codes - 1  (2) 2024.01.02
[Python for ML] Reduce 함수  (0) 2024.01.01
[Python for ML] Map 함수  (0) 2024.01.01
[Python for ML] Lambda 함수  (0) 2024.01.01

Reduce 함수

  • map 함수와 달리 list에 똑같은 함수를 적용해서 통합(이전의 계산 결과를 하나의 입력으로 넣는다)
  • 사용을 위해 from functools import reduce 호출
  • Legacy library나 다양한 머신러닝 코드에서 여전히 사용중

 

 

Ex 1) 기본적인 사용 예

from functools import reduce

print(reduce(lambda x, y: x + y, [1, 2, 3, 4, 5]))

15 -> (처음 계산 1 + 2 = 3을 x에 넣고, 다음의 계산 3 + 3 = 6 을 x에 넣고. . . 반복)



Ex 2) 팩토리얼 계산

def factorial(n):
    return reduce(
            lambda x, y: x * y, range(1, n+1))
            
print(factorial(5))

120 -> (1 * 2 * 3 * 4* 5)

 

 

'✍🏻Language & FrameWork > Python' 카테고리의 다른 글

[Python for ML] Linear Algebra Codes - 1  (2) 2024.01.02
[Python for ML] Asterisk  (0) 2024.01.02
[Python for ML] Map 함수  (0) 2024.01.01
[Python for ML] Lambda 함수  (0) 2024.01.01
[Python for ML] Zip 함수  (0) 2024.01.01

Map 함수

  • Sequence 자료형(List, Tuple)의 각 원소(element)에 동일한 function을 적용함
  • Python 3 부터는 사용하지 않는 것을 추천하지만, Legacy library 나 다양한 머신러닝 코드에서 여전히 사용중
  • 모든 원소에 함수를 적용하고 싶을 때 자주 사용한다.
  • map( ) 만을 적용한 결과는 값의 주소가 출력되고, list(map( )) 을 같이 사용해주어야 적용된 결과가 출력된다.

 

map(Function_name, List_data)

  1. Function_name = 적용시킬 함수
  2. List_data = Sequence 자료형

 

Ex 1) 기본적인 map 함수 사용 예

ex = [1, 2, 3, 4, 5]
f = lambda x: x ** 2
print(map(f, ex)) # 주소 출력
print(list(map(f, ex)))

<map at 0x10eb2db00>

[2, 4, 6, 8, 10]

 

 

Ex 1-1) map만 사용하여 값을 출력하는 방법

ex = [1, 2, 3, 4, 5]
f = lambda x: x ** 2
print(f, ex)    # map 함수만 적용하면 값의 주소가 출력

for i in map(f, ex):    # for loop을 사용하면 값이 출력
    print(i)

<map object at 0x10f16c9e8>

1

4

9

16

25

 

 

Ex 2) zip 함수와 동일한 결과 출력하기

  • 2개 이상의 Sequence 자료형에 대해 사용할 경우, 같은 인덱스에 있는 원소와 연산한다.
ex = [1, 2, 3, 4, 5]
f = lambda x, y: x + y
print(list(map(f, ex, ex)))

[2, 4, 6, 8, 10]

 

 

Ex 3) lambda 함수 + Filter(if문)

  • lambda 와 Filter를 함께 사용할 때는 List comprehension과는 달리 Filter는 조건을 만족하지 않을 때의 else 값을 반드시 넣어주어야함
# 만족할 때는 제곱, 만족하지 않으면 원래의 값 그대로
ex = [1, 2, 3, 4, 5]
list(map(
    lambda x: x ** 2 if x % 2 == 0 else x,
    ex))

[1, 4, 3, 16, 5]

 

 

Ex 3-1) List comprehension으로 Ex 3) 표현해보기

ex = [1, 2, 3, 4, 5]
result = [i for i in ex if i % 2 == 0 else i]
print(result)

[1, 4, 3, 16, 5]

 

 

'✍🏻Language & FrameWork > Python' 카테고리의 다른 글

[Python for ML] Asterisk  (0) 2024.01.02
[Python for ML] Reduce 함수  (0) 2024.01.01
[Python for ML] Lambda 함수  (0) 2024.01.01
[Python for ML] Zip 함수  (0) 2024.01.01
[Python for ML] Enumerate 함수  (0) 2023.12.30

Lambda 함수

  • 함수 이름 없이, 함수처럼 쓸 수 있는 익명함수
  • 수학의 람다 대수에서 유래함
  • 직관성이 많이 떨어져 Python 3부터는 권장하지 않음. (코테 준비할 때 많이 봤던 기억이..)
  • Legacy library나 다양한 머신러닝 코드에서 여전히 사용중

 

Ex) 각각의 예시

# 더하는 함수 예시
f = lambda x,y: x + y
print(f(1,4))

# 제곱하는 함수 예시
f = lambda x: x**2
print(f(3))

# 나누는 함수 예시
f = lambda x: x/2
print(f(3))

# 바로 사용하기
print((lambda x: x+1)(5))

 

다음의 Map, Reduce 게시글에서 더 사용할 예정이다.

'✍🏻Language & FrameWork > Python' 카테고리의 다른 글

[Python for ML] Reduce 함수  (0) 2024.01.01
[Python for ML] Map 함수  (0) 2024.01.01
[Python for ML] Zip 함수  (0) 2024.01.01
[Python for ML] Enumerate 함수  (0) 2023.12.30
[Python for ML] List Comprehension  (2) 2023.12.30