코딩 테스트 예제를 풀다 충격받은 마법(?)의 한줄의 있어서 기록해두려고 한다.
숫자의 사칙연산 (더하기, 빼기, 곱하기, 나누기)
정수 num1, num2가 매개변수로 주어질 때, num1을 num2로 나눈 몫을 return 하도록 solution 함수를 완성해주세요.
단, 제한사항
0 < num1 ≤ 100
0 < num2 ≤ 100
def solution(num1, num2):
if not 0 < num1 <= 100:
print(f"{num1}은(는) 0보다 크고 100보다 작거나 같아야합니다!")
if not 0 < num2 <= 100:
print(f"{num2}은(는) 0보다 크고 100보다 작거나 같아야합니다!")
else:
return int(num1 / num2)
solution = int.__floordiv__
solution = lambda x, y : x//y
한 줄로 해결해버리다...lambda는 분명 알고있는 방식이었는데 생각도 못했다!! 충격 받아서 저것들이 무엇인지 파헤쳐보기로 함.
저 floordiv라는 건 operator라는 python 내장 연산자안에 있는 함수 중 하나다.
floordiv는 괄호 안에 들어간 인수의 나눗셈을 정수로 반환한다. 즉, 소숫점이 없다.
예시를 보자.
print(int.__floordiv__(6, 3))
import operator
print(operator.__floordiv__(5,3))
형태는 이러하다. 앞에 int를 붙이면 따로 무언가를 import할 필요는 없으나, operator를 사용할 때는 operator를 import 해줘야 한다.
그 외에도 operator에는
# 덧셈
operator.__add__(a, b)
# 뺄셈
operator.__sub__(a, b)
등 여러 연산자들이 있으니, python docs를 보면서 활용하면 될 듯 하다.
참고 링크
lambda는 함수를 한 줄로 쓸 수 있게 만들어주는 것이다. 보통은
lambda a, b : a + b
이런 식으로, 매개변수 : 식 형태로 이루어져있다.
예시는 사칙 연산을 들었는데, 얘는 사칙 연산식 외에도 map, filter, reduce 등 다른 함수들과 엮어 쓸 때 빛을 발하는 녀석이라고 한다.
기초 강의를 들을 때 마지막에 어렴풋이 나오긴 했는데, 이렇게 함수를 간단하고 직관적으로 해결시켜주기도 하는구나! 놀랍다.
.
.
이런 python 내장 함수들 보면서 느끼지만, 정말 인간은 편리성을 위해 모든 걸 단축시키는 구나 싶어서 놀랍다. ㅋㅋ 그리고 내가 뻘뻘 땀 흘리면서 몇 줄 씩 써 내려간 코드를 한 줄로 해결할 수 있는 방법을 발견할 때마다 아!! 이제 이 짓거리 안해도 된다!! 신난다!! 하고 희열을 느낀다. python 공부를 하면서 새로운 지식이 늘어갈 때 마다 그런 부분이 재밌는 것 같다.