파이썬의 숨겨진 기능들
파이썬의 숨겨진 기능들
walrus 연산자 (:=)
파이썬 3.8 버전부터 도입된 walrus 연산자는 변수 할당과 값 비교를 한 줄에 수행할 수 있게 하는 기능입니다. 예를 들어, 다음과 같은 코드를 사용할 수 있습니다.
if (x := is_valid_input(input())) is True:
# x는 유효한 입력이고 다음 코드를 실행합니다.
f-문자열
f-문자열은 문자열 내에 변수를 직접 삽입할 수 있게 하는 기능입니다. 예를 들어, 다음과 같은 코드를 사용할 수 있습니다.
name = "John"
age = 30
message = f"안녕하세요, {name}님! 당신은 {age}살입니다."
print(message)
unpacking 연산자
unpacking 연산자는 리스트, 튜플, 딕셔너리와 같은 자료구조를 여러 변수에 나누어 할당할 수 있게 하는 기능입니다. 예를 들어, 다음과 같은 코드를 사용할 수 있습니다.
numbers = [1, 2, 3]
a, b, c = numbers
print(a, b, c)
enumerate 함수
enumerate 함수는 리스트의 각 항목을 인덱스와 함께 반환하는 함수입니다. 예를 들어, 다음과 같은 코드를 사용할 수 있습니다.
fruits = ["사과", "바나나", "오렌지"]
for index, fruit in enumerate(fruits):
print(f"{index + 1}: {fruit}")
zip 함수
zip 함수는 여러 개의 iterable 객체를 하나의 iterable 객체로 결합하는 함수입니다. 예를 들어, 다음과 같은 코드를 사용할 수 있습니다.
names = ["John", "Jane", "Mike"]
ages = [30, 25, 40]
for name, age in zip(names, ages):
print(f"{name}은 {age}살입니다.")
map, filter, reduce 함수
map, filter, reduce 함수는 리스트와 같은 iterable 객체를 처리하는 데 유용한 함수입니다.
- map 함수는 iterable 객체의 각 항목에 함수를 적용하고 결과를 새로운 iterable 객체로 반환합니다.
- reduce 함수는 iterable 객체의 각 항목을 함수에 적용하고 누적된 결과를 반환합니다.
lambda 함수
lambda 함수는 간단한 함수를 정의할 수 있는 기능입니다. 예를 들어, 다음과 같은 코드를 사용할 수 있습니다.
add_one = lambda x: x + 1
print(add_one(2)) # 3
magic 메소드
magic 메소드는 파이썬 객체에 특수한 기능을 부여할 수 있는 메소드입니다. 예를 들어, add 메소드는 두 객체를 더할 때 사용되는 메소드입니다.
모듈 및 패키지
파이썬은 모듈과 패키지를 사용하여 코드를 재사용하고 관리할 수 있습니다. 모듈은 .py 파일로 구성된 단위이며, 패키지는 모듈들을 모아서 관리하는 단위입니다.
디버깅
파이썬은 pdb, ipdb와 같은 디버깅 도구를 제공하여 코드를 쉽게 디버깅할 수 있습니다.
이 외에도 파이썬에는 다양한 숨겨진 기능들이 있습니다. 이러한 기능들을 배우고 활용하면 코딩을 더욱 효율적이고 간결하게 만들 수 있으며, 개발자의 생산성을 크게 향상시킬 수 있습니다.
참고 자료
- [10 Python Features You Should Know](https
예제 코드
walrus 연산자
# 사용자 입력을 받고 유효한지 검사합니다.
x = input("숫자를 입력하세요: ")
# walrus 연산자를 사용하여 x가 숫자인지 확인합니다.
if (x := is_valid_number(x)) is True:
# x는 숫자이고 다음 코드를 실행합니다.
print(f"{x}는 유효한 숫자입니다.")
else:
print(f"{x}는 유효한 숫자가 아닙니다.")
f-문자열
name = "John"
age = 30
# f-문자열을 사용하여 문자열을 생성합니다.
message = f"""
안녕하세요, {name}님!
당신은 {age}살이고,
오늘은 {date.today()}입니다.
"""
print(message)
unpacking 연산자
# 튜플을 unpacking합니다.
person = ("John", 30, "Male")
name, age, gender = person
print(f"이름: {name}, 나이: {age}, 성별: {gender}")
# 딕셔너리를 unpacking합니다.
address = {"city": "Seoul", "country": "Korea"}
city, country = address.values()
print(f"도시: {city}, 국가: {country}")
enumerate 함수
fruits = ["사과", "바나나", "오렌지", "포도"]
# enumerate 함수를 사용하여 리스트의 각 항목을 인덱스와 함께 출력합니다.
for index, fruit in enumerate(fruits):
print(f"{index + 1}: {fruit}")
zip 함수
names = ["John", "Jane", "Mike"]
ages = [30, 25, 40]
# zip 함수를 사용하여 이름과 나이를 짝지어 출력합니다.
for name, age in zip(names, ages):
print(f"{name}은 {age}살입니다.")
map, filter, reduce 함수
# map 함수
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers) # [1, 4, 9, 16, 25]
# filter 함수
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # [2, 4]
# reduce 함수
sum_of_numbers = reduce(lambda a, b: a + b, numbers)
print(sum_of_numbers) # 15
lambda 함수
# lambda 함수를 사용하여 리스트의 각 항목에 1을 더합니다.
add_one = lambda x: x + 1
numbers = [1, 2, 3, 4, 5]
incremented_numbers = list(map(add_one, numbers))
print(incremented_numbers) # [2, 3, 4, 5, 6]
magic 메소드
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Point(self.x + other.x, self.y + other.y)
# 두 Point 객체를 더합니다.
p1 = Point(1, 2)
p2 = Point(3, 4)
p3 = p1 + p2
print(p3.x, p3.y) # 4 6
모듈 및 패키지
# my_module.py 모듈을 import합니다.
import my_module
# my_module.py 모듈의 함수를 사용합니다.
my_module.say_hello()
# my_package 패키지를 import합니다.
import my_package
# my_package 패키지의 모듈을 import합니다.
from my_package import my_module
# my_package 패키지의 모듈의 함수를 사용합니다.
my_module.say_hello
대체 방법
f-문자열 대신 .format() 메소드 사용
name = "John"
age = 30
message = "안녕하세요, {}님! 당신은 {}살입니다.".format(name, age)
print(message)
unpacking 연산자 대신 for 루프 사용
person = ("John", 30, "Male")
for item in person:
print(item)
address = {"city": "Seoul", "country": "Korea"}
for key, value in address.items():
print(f"{key}: {value}")
enumerate 함수 대신 for 루프와 인덱스 사용
fruits = ["사과", "바나나", "오렌지", "포도"]
for i, fruit in enumerate(fruits):
print(f"{i + 1}: {fruit}")
zip 함수 대신 for 루프 사용
names = ["John", "Jane", "Mike"]
ages = [30, 25, 40]
for i in range(len(names)):
print(f"{names[i]}은 {ages[i]}살입니다.")
- map 함수: 리스트 comprehension 사용
- reduce 함수: for 루프 사용
- 간단한 함수인 경우 직접 정의
- 복잡한 함수인 경우 lambda 함수 사용
- 특수한 기능을 제공하는 라이브러리 사용
- 다른 프로그래밍 언어의 기능 사용
디버깅 대체
- 다른 디버깅 도구 사용
- 콘솔 출력 사용
코드 스타일
- PEP 8 스타일 가이드라인 준수
python hidden-features