[이코테] 1. 파이썬 문법 부수기(4/4) - 함수와 표준 라이브러리

nang_zz·2022년 7월 16일
0

이코테2021

목록 보기
4/5
post-thumbnail

동빈나님의 이코테 2021을 보고 정리한 게시글입니다.


함수와 표준 라이브러리

함수

함수(Function)란 특정한 작업을 하나의 단위로 묶어 놓은 것으로 , 불필요한 소스코드의 반복을 줄일 수 있다.

함수의 종류

  • 내장 함수: 파이썬이 기본적으로 제공하는 함수
  • 사용자 정의 함수: 개발자가 직접 정의하여 사용할 수 있는 함수

함수 정의하기

  • 매개변수: 함수 내부에서 사용할 변수
  • 반환 값: 함수에서 처리 된 결과를 반환
def 함수명(매개변수):
	실행할 소스코드
    return 반환 값

더하기 함수 예시 1)

def add(a, b):
	return a + b
    
print(add(3, 7))

[실행 결과]

10

더하기 함수 예시 2)

def add(a, b):
	print("함수의 결과:", a + b)
    
add(3, 7)

[실행 결과]

함수의 결과: 10

파라마터 지정하기

파라미터의 변수를 직접 지정할 수 있다

  • 이 경우 매개변수의 순서가 달라도 상관 없다.
def add(a, b):
	print("함수의 결과:", a + b)
    
add(b = 3, a = 7)

[실행 결과]

함수의 결과: 10

global 키워드

global 키워드로 변수를 지정하면 해당 함수에서는 지역 변수를 만들지 않고, 함수 바깥에 선언된 변수를 바로 참조

a = 0

def func():
	global a  #함수 바깥에 선언된 변수를 바로 참조
    a += 1
    
for i in range(10):
	func()
    
print(a)

[실행 결과]

10

여러 개의 반환 값

파이썬에서 함수는 여러 개의 반환 값을 가질 수 있다.

def operator(a, b):
	add_var = a + b
    subtract_var = a - b
    multiply_var = a * b
    divide_var = a / b
    return add_var, subtract_var, multiply_var, divide_var
    
a, b, c, d = operator(7, 3)
print(a, b, c, d)

[실행 결과]

10 4 21 2.3333333333333335



람다 표현식

함수를 하나의 식으로 간단하게 작성

  • 함수 자체를 입력으로 받는 경우
  • 함수 기능이 매우 간단한 경우
  • 한번 사용하고 말 함수인 경우
print((lambda a, b: a + b)(3, 7))

[실행 결과]

10

람다 표현식 예시

일반 함수 사용)

array = [('홍길동', 50), ('이순신', 32), ('아무개', 74)]

def my_key(x):
	return x[1]
    
print(sorted(array, key = my_key))

람다 함수 사용)

array = [('홍길동', 50), ('이순신', 32), ('아무개', 74)]

print(sorted(array, key = lambda x: x[1]))

[실행 결과]

[('이순신', 32), ('홍길동', 50), ('아무개', 74)]



실전에서 유용한 표준 라이브러리

  • 내장 함수: 기본 입출력 함수부터 정렬 함수까지 기본적인 함수 제공
  • itertools: 파이썬에서 반복되는 형태의 데이터를 처리하기 위한 유용한 기능 제공, 특히 순열과 조합 라이브러리
  • heapq: 힙(Heap) 자료구조 제공, 우선순위 큐 기능 구현 시 자주 사용
  • bisect: 이진 탐색(Binary Search)기능 제공
  • collections: 덱(deque), 카운터(Counter)등의 유용한 자료구조 포함
  • math: 필수적 수학적 기능 제공(팩토리얼, 제곱근, 최대공약수(GCD), 삼각함수 관련 함수부터 파이(pi)같은 상수)

자주 사용되는 내장 함수

  • sum(): 다수의 데이터를 포함하는 리스트, 튜플 등의 원소의 합
  • min(), max(): 가장 작은 값, 가장 큰 값 반환
  • eval(): 수식으로 표현된 하나의 식의 계산된 결과를 반환
  • sorted(): 각 원소를 정렬한 결과를 오름차순으로 반환
    - reverse=True 속성을 넣어주면 내림차순
    - key 속성으로 정렬 기준 명시 가능

💡sort()sorted() 차이는?
sort()는 리스트를 내부 정렬하는 메소드고, sorted()는 컨테이너형 데이터를 받아 정렬된 리스트를 리턴하는 함수


예시1)

#sum()
result = sum([1, 2, 3, 4, 5])
print(result)

#min(), max()
min_result = min(7, 3, 5, 2)
max_result = max(7, 3, 5, 2)
print(min_result, max_result)

#eval()
result = eval("(3+5)*7")
print(result)

[실행 결과]

15
2 7
56

예시2)

#sorted()
result = sorted([9, 1, 8, 5, 4])
reverse_result = sorted([9, 1, 8, 5, 4], reverse=True)
print(result)
print(reverse_result)

#sorted() with key
array = [('홍길동', 35), ('이순신', 75), ('아무개', 50)]
result = sorted(array, key=lambda x: x[1], reverse=True)
print(result)

[실행 결과]

[1, 4, 5, 8, 9]
[9, 8, 5, 4, 1]
[('이순신', 75), ('아무개', 50), ('홍길동', 35)]

itertools: 순열과 조합

  • 순열(permutations): 서로 다른 n개에서 서로 다른 r개를 선택하여 일렬로 나열하는 것
  • 조합(combinations): 서로 다른 n개에서 순서에 상관 없이 서로 다른 r개를 선택하는 것

순열)

from itertools import permutations

data = ['A', 'B', 'C']

result = list(permutations(data, 3)) #모든 순열
print(result)

[실행 결과]

[('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]

조합)

from itertools import combinations

data = ['A', 'B', 'C']

result = list(combinations(data, 2)) #2개를 뽑는 모든 조합
print(result)

[실행 결과]

[('A', 'B'), ('A', 'C'), ('B', 'C')]

중복 순열과 중복 조합

중복 순열)

from itertools import product

data = ['A', 'B', 'C']

result = list(product(data, repeat=2)) #2개를 뽑는 모든 순열 구하기(중복 허용)
print(result)

[실행 결과]

[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]

중복 조합)

from itertools import combinations_with_replacement

data = ['A', 'B', 'C']

result = list(combinations_with_replacement(data, 2)) #2개를 뽑는 모든 순열 구하기(중복 허용)
print(result)

[실행 결과]

[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]

collections: Counter

등장 횟수를 세는 기능

리스트와 같은 반복 가능한(iterable) 객체가 주어졌을 때 내부의 원소가 몇 번씩 등장했는지를 알려줌.

from collections import Counter

counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])

print(counter['blue']) #'blue'가 등장한 횟수
print(counter['green']) #'green'이 등장한 횟수
print(dict(counter)) #사전 자료형으로 변환

[실행 결과]

3
1
{'red': 2, 'blue': 3, 'green': 1}

math: 최대 공약수와 최소 공배수

import math

#최소 공배수(LCM)를 구하는 함수
def lcm(a, b):
	return a * b // math.gcd(a, b)
    
print(math.gcd(21, 14)) #최대 공약수(GCD)
print(lcm(21, 14)) #최소 공배수(LCM)

[실행 결과]

7
42

💡 math.lcm 은 없나요?
math.lcm은 파이썬 3.9이상의 버전에서 사용가능하므로 최대 공약수를 이용하여 구하는 방법을 알아두자.

profile
블로그 이전했어요. fine-dev.site

0개의 댓글