KR_BuiltIn - somaz94/python-study GitHub Wiki

Python λ‚΄μž₯ ν•¨μˆ˜(Built-in Functions) κ°œλ… 정리


1️⃣ 파이썬 λ‚΄μž₯ ν•¨μˆ˜

νŒŒμ΄μ¬μ€ 기본적으둜 μ‚¬μš©ν•  수 μžˆλŠ” λ‹€μ–‘ν•œ λ‚΄μž₯ ν•¨μˆ˜λ₯Ό μ œκ³΅ν•œλ‹€.


κΈ°λ³Έ ν•¨μˆ˜

# μˆ˜ν•™ κ΄€λ ¨
abs(-3)         # μ ˆλŒ“κ°’: 3
round(3.7)      # 반올림: 4
round(3.14159, 2)  # μ†Œμˆ˜μ  2μžλ¦¬κΉŒμ§€ 반올림: 3.14
max([1,2,3])    # μ΅œλŒ“κ°’: 3
min([1,2,3])    # μ΅œμ†Ÿκ°’: 1
sum([1,2,3])    # 합계: 6
pow(2, 3)       # κ±°λ“­μ œκ³±: 8
divmod(7, 3)    # λͺ«κ³Ό λ‚˜λ¨Έμ§€: (2, 1)

# ν˜•λ³€ν™˜
int("3")        # μ •μˆ˜λ‘œ λ³€ν™˜: 3
int("FF", 16)   # 16μ§„μˆ˜ λ¬Έμžμ—΄μ„ μ •μˆ˜λ‘œ: 255
float("3.14")   # μ‹€μˆ˜λ‘œ λ³€ν™˜: 3.14
str(123)        # λ¬Έμžμ—΄λ‘œ λ³€ν™˜: "123"
list("abc")     # 리슀트둜 λ³€ν™˜: ['a','b','c']
tuple([1,2,3])  # νŠœν”Œλ‘œ λ³€ν™˜: (1,2,3)
set([1,2,2,3])  # μ§‘ν•©μœΌλ‘œ λ³€ν™˜: {1,2,3}
dict(a=1, b=2)  # λ”•μ…”λ„ˆλ¦¬λ‘œ λ³€ν™˜: {'a':1, 'b':2}

βœ… κΈ°λ³Έ ν•¨μˆ˜ ν™œμš© 팁:

  • round()λŠ” 은행가 반올림(Banker's rounding) 방식을 μ‚¬μš©ν•œλ‹€ - μ •ν™•νžˆ κ°€μš΄λ° κ°’(예: 2.5)은 짝수둜 λ°˜μ˜¬λ¦Όλœλ‹€
  • max()와 min()은 key λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•΄ 비ꡐ 기쀀을 μ§€μ •ν•  수 μžˆλ‹€: max([1,-2,3], key=abs) β†’ 3 λŒ€μ‹  -2 λ°˜ν™˜
  • ν˜•λ³€ν™˜ ν•¨μˆ˜λŠ” μ μ ˆν•œ μž…λ ₯이 아닐 경우 ValueError 같은 μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚¨λ‹€
  • divmod()λŠ” 특히 큰 수의 λ‚˜λˆ—μ…ˆμ—μ„œ λͺ«κ³Ό λ‚˜λ¨Έμ§€λ₯Ό ν•œ λ²ˆμ— ꡬ할 λ•Œ μœ μš©ν•˜λ‹€


μ‹œν€€μŠ€/반볡 κ΄€λ ¨

# 길이와 λ²”μœ„
len([1,2,3])    # 길이: 3
range(5)        # λ²”μœ„: 0,1,2,3,4
range(1, 10, 2) # μ‹œμž‘, μ’…λ£Œ, μŠ€ν…: 1,3,5,7,9

# 반볡 처리
enumerate(['a','b'])     # 인덱슀-κ°’ 쌍: (0,'a'),(1,'b')
enumerate(['a','b'], 1)  # μ‹œμž‘ 인덱슀 μ§€μ •: (1,'a'),(2,'b')
zip([1,2], [3,4])        # 쌍으둜 묢기: (1,3),(2,4)
zip(*[[1,3], [2,4]])     # μ–ΈνŒ¨ν‚ΉμœΌλ‘œ μ „μΉ˜: (1,2),(3,4)

# 데이터 처리
list(filter(lambda x: x>0, [-1,0,1]))  # 필터링: [1]
list(map(lambda x: x*2, [1,2,3]))      # λ³€ν™˜: [2,4,6]
from functools import reduce
reduce(lambda x,y: x+y, [1,2,3])  # λˆ„μ  μ—°μ‚°: 6

# μ»¬λ ‰μ…˜ 생성
all([True, True, False])  # λͺ¨λ‘ 참인지: False
any([True, False, False]) # ν•˜λ‚˜λΌλ„ 참인지: True

βœ… μ‹œν€€μŠ€/반볡 ν•¨μˆ˜ ν™œμš© 팁:

  • range()λŠ” λ©”λͺ¨λ¦¬ 효율적인 μ΄ν„°λ ˆμ΄ν„°λ₯Ό λ°˜ν™˜ν•œλ‹€ - 큰 λ²”μœ„λ„ 적은 λ©”λͺ¨λ¦¬λ‘œ 처리
  • enumerate()λŠ” μΈλ±μŠ€κ°€ ν•„μš”ν•œ for λ£¨ν”„μ—μ„œ 맀우 μœ μš©ν•˜λ‹€: for i, val in enumerate(items):
  • zip()은 μ—¬λŸ¬ μ‹œν€€μŠ€λ₯Ό λ³‘λ ¬λ‘œ μ²˜λ¦¬ν•  λ•Œ μ‚¬μš©ν•œλ‹€ - 길이가 λ‹€λ₯Έ 경우 κ°€μž₯ 짧은 μ‹œν€€μŠ€μ— λ§žμΆ°μ§„λ‹€
  • filter()와 map()은 μ§€μ—° 평가(lazy evaluation) μ΄ν„°λ ˆμ΄ν„°λ₯Ό λ°˜ν™˜ν•œλ‹€ - ν•„μš”ν•  λ•Œλ§Œ 계산
  • all()κ³Ό any()λŠ” 빈 μ‹œν€€μŠ€μ— λŒ€ν•΄ 각각 True와 Falseλ₯Ό λ°˜ν™˜ν•œλ‹€


νƒ€μž…/속성 κ΄€λ ¨

# νƒ€μž… 확인
type(123)               # νƒ€μž… 확인: <class 'int'>
isinstance(123, int)    # νƒ€μž… 검사: True
isinstance(123, (int, float))  # μ—¬λŸ¬ νƒ€μž… 쀑 ν•˜λ‚˜μΈμ§€: True
issubclass(bool, int)   # 상속 관계 확인: True

# 속성/λ©”μ„œλ“œ 확인
dir([])                 # 객체의 속성/λ©”μ„œλ“œ λͺ©λ‘
hasattr(obj, 'attr')    # 속성 쑴재 μ—¬λΆ€
getattr(obj, 'attr')    # 속성 κ°’ κ°€μ Έμ˜€κΈ°
setattr(obj, 'attr', value)  # 속성 κ°’ μ„€μ •
delattr(obj, 'attr')    # 속성 μ‚­μ œ

# 속성 이름/κ°’
vars(obj)               # 객체의 __dict__ λ°˜ν™˜
globals()              # μ „μ—­ 심볼 ν…Œμ΄λΈ”
locals()               # μ§€μ—­ 심볼 ν…Œμ΄λΈ”

βœ… νƒ€μž…/속성 ν•¨μˆ˜ ν™œμš© 팁:

  • isinstance()λŠ” type() 비ꡐ보닀 상속을 κ³ λ €ν•˜λ―€λ‘œ 더 μ•ˆμ „ν•˜λ‹€
  • dir()에 인자 없이 ν˜ΈμΆœν•˜λ©΄ ν˜„μž¬ λ²”μœ„μ˜ 이름 λͺ©λ‘μ„ λ°˜ν™˜ν•œλ‹€
  • getattr()λŠ” 기본값을 μ§€μ •ν•  수 μžˆλ‹€: getattr(obj, 'attr', default_value)
  • vars()λŠ” λ„€μž„μŠ€νŽ˜μ΄μŠ€ λ”•μ…”λ„ˆλ¦¬μ— 직접 μ ‘κ·Όν•˜λ―€λ‘œ 디버깅에 μœ μš©ν•˜λ‹€
  • globals()와 locals()λŠ” 동적 μ½”λ“œ μƒμ„±μ΄λ‚˜ λ‚΄λΆ€ 검사에 ν™œμš©λœλ‹€


μž…μΆœλ ₯/μ‹œμŠ€ν…œ

# μž…μΆœλ ₯
print("Hello")           # 좜λ ₯
print("A", "B", sep=",") # κ΅¬λΆ„μž μ§€μ •: "A,B"
print("End", end="")     # 끝문자 μ§€μ • (μ€„λ°”κΏˆ λ°©μ§€)
input("μž…λ ₯: ")          # μž…λ ₯ λ°›κΈ°

# 파일
open('file.txt', 'r')    # 파일 μ—΄κΈ°
with open('file.txt', 'r') as f:  # μ»¨ν…μŠ€νŠΈ κ΄€λ¦¬μž μ‚¬μš©
    data = f.read()

# μ‹œμŠ€ν…œ
id(obj)                 # 객체의 고유 ID
hash(obj)               # ν•΄μ‹œκ°’
help(print)             # 도움말 ν‘œμ‹œ
exit()                  # ν”„λ‘œκ·Έλž¨ μ’…λ£Œ
__import__('math')      # 동적 λͺ¨λ“ˆ μž„ν¬νŠΈ

# λ©”λͺ¨λ¦¬ 관리
repr(obj)               # 객체의 λ¬Έμžμ—΄ ν‘œν˜„
format(12.3, '.2f')     # ν˜•μ‹ μ§€μ •: "12.30"

βœ… μž…μΆœλ ₯/μ‹œμŠ€ν…œ ν•¨μˆ˜ ν™œμš© 팁:

  • print()λŠ” λ‹€μ–‘ν•œ μ˜΅μ…˜(sep, end, file)으둜 좜λ ₯ ν˜•μ‹μ„ μ§€μ •ν•  수 μžˆλ‹€
  • νŒŒμΌμ„ μ—΄ λ•ŒλŠ” 항상 with ꡬ문을 μ‚¬μš©ν•˜μ—¬ μžλ™μœΌλ‘œ λ‹«νžˆλ„λ‘ ν•˜λŠ” 것이 μ’‹λ‹€
  • hash()λŠ” λ³€κ²½ λΆˆκ°€λŠ₯ν•œ(immutable) 객체만 κ°€λŠ₯ν•˜λ‹€ - λ”•μ…”λ„ˆλ¦¬ ν‚€λ‘œ μ‚¬μš© κ°€λŠ₯ μ—¬λΆ€ 확인
  • repr()은 eval(repr(obj)) == objκ°€ κ°€λŠ₯ν•œ λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•˜λŠ” 것이 이상적이닀
  • help()λŠ” λŒ€ν™”ν˜• ν™˜κ²½μ—μ„œ ν•¨μˆ˜λ‚˜ λͺ¨λ“ˆμ˜ λ¬Έμ„œλ₯Ό 확인할 λ•Œ μœ μš©ν•˜λ‹€


객체 및 클래슀 κ΄€λ ¨

# 객체 λ³€ν™˜ 및 검사
ascii('ν•œκΈ€')           # ASCII둜 ν‘œν˜„: '\ud55c\uae00'
ord('A')               # 문자의 μœ λ‹ˆμ½”λ“œ μ½”λ“œν¬μΈνŠΈ: 65
chr(65)                # μ½”λ“œν¬μΈνŠΈμ— ν•΄λ‹Ήν•˜λŠ” 문자: 'A'
callable(func)         # 호좜 κ°€λŠ₯ μ—¬λΆ€ 확인: True/False

# 클래슀 κ΄€λ ¨
@classmethod           # 클래슀 λ©”μ„œλ“œ λ°μ½”λ ˆμ΄ν„°
@staticmethod          # 정적 λ©”μ„œλ“œ λ°μ½”λ ˆμ΄ν„°
@property              # 속성 λ°μ½”λ ˆμ΄ν„°
super()                # λΆ€λͺ¨ 클래슀 μ°Έμ‘°

βœ… 객체/클래슀 ν•¨μˆ˜ ν™œμš© 팁:

  • ord()와 chr()은 λ¬Έμžμ™€ μ½”λ“œν¬μΈνŠΈ κ°„ λ³€ν™˜μ— μœ μš©ν•˜λ‹€
  • callable()은 ν•¨μˆ˜μΈμ§€ 확인할 λ•Œλ³΄λ‹€ __call__ λ©”μ„œλ“œ κ΅¬ν˜„ μ—¬λΆ€λ₯Ό 확인할 λ•Œ 더 μœ μš©ν•˜λ‹€
  • λ°μ½”λ ˆμ΄ν„°λŠ” λ©”μ„œλ“œμ˜ λ™μž‘μ„ λ³€κ²½ν•˜λŠ” κ°•λ ₯ν•œ 도ꡬ이닀
  • super()λŠ” λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”© μ‹œ λΆ€λͺ¨ 클래슀의 κ΅¬ν˜„μ„ ν˜ΈμΆœν•  λ•Œ μ‚¬μš©ν•œλ‹€


기타 μœ μš©ν•œ ν•¨μˆ˜

# 평가/μ‹€ν–‰
eval("1 + 2")           # λ¬Έμžμ—΄ μˆ˜μ‹ 계산: 3
exec("x = 1")           # λ¬Έμžμ—΄ μ½”λ“œ μ‹€ν–‰
compile("x+y", "<string>", "eval")  # μ½”λ“œ 컴파일

# μ •λ ¬
sorted([3,1,2])         # μ •λ ¬: [1,2,3]
sorted([3,1,2], reverse=True)  # μ—­μˆœ μ •λ ¬: [3,2,1]
sorted([(1,'b'), (2,'a')], key=lambda x: x[1])  # ν‚€ κΈ°μ€€: [(2,'a'), (1,'b')]

# 진법 λ³€ν™˜
bin(42)                 # 2μ§„μˆ˜: '0b101010'
oct(42)                 # 8μ§„μˆ˜: '0o52'
hex(42)                 # 16μ§„μˆ˜: '0x2a'
int('0b101010', 2)      # 2μ§„μˆ˜ λ¬Έμžμ—΄μ—μ„œ μ •μˆ˜λ‘œ: 42

# λ³΅μ†Œμˆ˜
complex(1, 2)           # λ³΅μ†Œμˆ˜ 생성: (1+2j)
abs(3+4j)               # λ³΅μ†Œμˆ˜ μ ˆλŒ“κ°’(크기): 5.0

# μ΄ν„°λ ˆμ΄ν„°
iter([1, 2, 3])         # μ΄ν„°λ ˆμ΄ν„° 생성
next(iterator)          # λ‹€μŒ ν•­λͺ© κ°€μ Έμ˜€κΈ°

βœ… 기타 ν•¨μˆ˜ ν™œμš© 팁:

  • eval()κ³Ό exec()λŠ” μ‚¬μš©μž μž…λ ₯μœΌλ‘œλΆ€ν„° 직접 μ‹€ν–‰ν•  경우 λ³΄μ•ˆ μœ„ν—˜μ΄ μžˆλ‹€
  • sorted()λŠ” 원본을 λ³€κ²½ν•˜μ§€ μ•Šκ³  μƒˆ 리슀트λ₯Ό λ°˜ν™˜ν•œλ‹€ (반면 list.sort()λŠ” 원본 λ³€κ²½)
  • 진법 λ³€ν™˜ ν•¨μˆ˜λŠ” 접두어(0b, 0o, 0x)κ°€ ν¬ν•¨λœ λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•œλ‹€
  • iter()λŠ” callableκ³Ό 센티널 값을 받을 μˆ˜λ„ μžˆλ‹€: iter(callable, sentinel)
  • next()λŠ” 기본값을 μ œκ³΅ν•  수 μžˆλ‹€: next(iterator, default)


2️⃣ κ³ κΈ‰ λ‚΄μž₯ ν•¨μˆ˜ μ‚¬μš©λ²•

객체 μƒν˜Έμž‘μš© ν•¨μˆ˜

# μŠ¬λΌμ΄μ‹±κ³Ό 인덱싱
slice(1, 10, 2)         # 슬라이슀 객체 생성
array[slice(1, 10, 2)]  # [1:10:2]와 동일

# 비ꡐ ν•¨μˆ˜
cmp_to_key(func)        # 비ꡐ ν•¨μˆ˜λ₯Ό ν‚€ ν•¨μˆ˜λ‘œ λ³€ν™˜
sorted([3,1,2], key=cmp_to_key(lambda a, b: a - b))

# ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°
from functools import partial
add5 = partial(lambda x, y: x + y, 5)  # λΆ€λΆ„ 적용: add5(3) == 8

λ©”λͺ¨λ¦¬ 및 μ„±λŠ₯ μ΅œμ ν™”

# λ©”λͺ¨λ¦¬ λ·°
memoryview(bytes(10))   # λ©”λͺ¨λ¦¬ 효율적인 λ°”μ΄νŠΈ μ‘°μž‘

# 객체 크기
import sys
sys.getsizeof([1, 2, 3])  # 객체 λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ (λ°”μ΄νŠΈ)

# μ„±λŠ₯ μΈ‘μ •
from timeit import timeit
timeit("'-'.join(str(n) for n in range(100))", number=10000)

λ‚΄μž₯ ν•¨μˆ˜ μ‘°ν•© μ‚¬μš©

# 데이터 처리 νŒŒμ΄ν”„λΌμΈ
data = [1, -2, 3, -4, 5]
result = sum(map(abs, filter(lambda x: x % 2 == 1, data)))
print(result)  # ν™€μˆ˜ κ°’λ“€μ˜ μ ˆλŒ“κ°’ ν•©: 9

# μ‚¬μ „μ˜ ν‚€-κ°’ ꡐ체
inverted_dict = dict(map(reversed, original_dict.items()))

# 쀑첩 리슀트 평탄화
nested = [[1, 2], [3, 4]]
flattened = list(sum(nested, []))  # [1, 2, 3, 4]
# 더 효율적인 방법 (itertools μ‚¬μš©)
from itertools import chain
flattened = list(chain.from_iterable(nested))

βœ… κ³ κΈ‰ ν™œμš© 팁:

  • λ‚΄μž₯ ν•¨μˆ˜λ₯Ό μ‘°ν•©ν•˜λ©΄ κ°„κ²°ν•˜κ³  효율적인 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλ‹€
  • ν•˜μ§€λ§Œ λ„ˆλ¬΄ λ§Žμ€ 쑰합은 가독성을 ν•΄μΉ  수 μžˆμœΌλ―€λ‘œ μ μ ˆν•œ κ· ν˜•μ΄ ν•„μš”ν•˜λ‹€
  • λ©”λͺ¨λ¦¬λ‚˜ μ„±λŠ₯ μ΅œμ ν™”κ°€ ν•„μš”ν•œ 경우 memoryviewλ‚˜ itertools λͺ¨λ“ˆμ„ κ³ λ €ν•œλ‹€
  • 특수 λͺ©μ μ˜ μ΅œμ ν™”λŠ” 파이썬 λ‚΄μž₯ ν•¨μˆ˜λ§ŒμœΌλ‘œλŠ” ν•œκ³„κ°€ μžˆμ–΄ NumPy 같은 μ™ΈλΆ€ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μœ μš©ν•  수 μžˆλ‹€


3️⃣ 파이썬 버전별 μΆ”κ°€λœ λ‚΄μž₯ ν•¨μˆ˜

Python 3.x에 μΆ”κ°€λœ ν•¨μˆ˜

# Python 3.8+
breakpoint()           # 디버거 μ§„μž…μ 
# Python 3.7+
from time import time_ns
time_ns()              # λ‚˜λ…Έμ΄ˆ λ‹¨μœ„ μ‹œκ°„ μΈ‘μ •
# Python 3.5+
from math import isclose
isclose(1.0, 1.0001, rel_tol=1e-3)  # λΆ€λ™μ†Œμˆ˜μ  근사 비ꡐ: True

βœ… 버전별 ν•¨μˆ˜ ν™œμš© 팁:

  • μ΅œμ‹  파이썬 λ²„μ „μ˜ λ‚΄μž₯ ν•¨μˆ˜λ₯Ό ν™œμš©ν•˜λ©΄ μ½”λ“œκ°€ 더 κ°„κ²°ν•΄μ§ˆ 수 μžˆλ‹€
  • ν•˜μ§€λ§Œ μ½”λ“œμ˜ ν˜Έν™˜μ„±μ΄ μ€‘μš”ν•˜λ‹€λ©΄ νŠΉμ • λ²„μ „μ—λ§Œ μžˆλŠ” ν•¨μˆ˜ μ‚¬μš©μ— μ£Όμ˜ν•΄μ•Ό ν•œλ‹€
  • 이전 버전 지원이 ν•„μš”ν•˜λ©΄ 폴백(fallback) κ΅¬ν˜„μ„ κ³ λ €ν•œλ‹€


4️⃣ κ³ μ„±λŠ₯ 처리λ₯Ό μœ„ν•œ λ‚΄μž₯ ν•¨μˆ˜ μ΅œμ ν™”

효율적인 데이터 처리

# 큰 파일 효율적으둜 읽기
with open('large_file.txt', 'r') as f:
    # ν•œ λ²ˆμ— λͺ¨λ‘ μ½λŠ” λŒ€μ‹  라인 λ‹¨μœ„λ‘œ 처리
    for line in f:
        process(line.strip())

# λŒ€μš©λŸ‰ 리슀트 생성 μ‹œ 리슀트 μ»΄ν”„λ¦¬ν—¨μ…˜ ν™œμš©
squares = [x**2 for x in range(1000)]  # map() ν•¨μˆ˜λ³΄λ‹€ λΉ λ₯Ό 수 있음

# λ”•μ…”λ„ˆλ¦¬ μ»΄ν”„λ¦¬ν—¨μ…˜
word_lengths = {word: len(word) for word in words}

μ§€μ—° 평가(Lazy Evaluation) ν™œμš©

# λΆˆν•„μš”ν•œ 전체 리슀트 생성 λ°©μ§€
def process_large_data():
    data = get_data_source()  # μ΄ν„°λ ˆμ΄ν„° λ°˜ν™˜
    filtered = filter(is_valid, data)
    transformed = map(transform, filtered)
    
    # ν•„μš”ν•œ λΆ€λΆ„λ§Œ 계산(처음 10개만)
    for i, item in enumerate(transformed):
        if i >= 10:
            break
        process_item(item)

βœ… μ„±λŠ₯ μ΅œμ ν™” 팁:

  • λ‚΄μž₯ ν•¨μˆ˜λŠ” C둜 κ΅¬ν˜„λ˜μ–΄ μžˆμ–΄ 일반적으둜 순수 파이썬 κ΅¬ν˜„λ³΄λ‹€ λΉ λ₯΄λ‹€
  • map()κ³Ό filter()λŠ” μ§€μ—° 평가λ₯Ό 톡해 λ©”λͺ¨λ¦¬ νš¨μœ¨μ„±μ„ μ œκ³΅ν•œλ‹€
  • 큰 데이터셋을 μ²˜λ¦¬ν•  λ•ŒλŠ” μ œλ„ˆλ ˆμ΄ν„° ν‘œν˜„μ‹μ΄λ‚˜ μ΄ν„°λ ˆμ΄ν„°λ₯Ό ν™œμš©ν•œλ‹€
  • ν•«μŠ€νŒŸ(μ„±λŠ₯ 병λͺ©)이 μžˆλŠ” μ½”λ“œλŠ” ν”„λ‘œνŒŒμΌλ§ ν›„ μ΅œμ ν™”ν•œλ‹€
  • 정말 μ„±λŠ₯이 μ€‘μš”ν•œ 뢀뢄은 NumPy, Pandas 같은 μ΅œμ ν™”λœ 라이브러리λ₯Ό κ³ λ €ν•œλ‹€


5️⃣ μ»€μŠ€ν…€ 객체와 λ‚΄μž₯ ν•¨μˆ˜ 톡합

맀직 λ©”μ„œλ“œλ₯Ό ν†΅ν•œ λ™μž‘ μ •μ˜

class CustomCollection:
    def __init__(self, items):
        self.items = items
    
    def __len__(self):
        return len(self.items)
    
    def __iter__(self):
        return iter(self.items)
    
    def __contains__(self, item):
        return item in self.items
    
    def __bool__(self):
        return bool(self.items)
    
    def __getitem__(self, idx):
        return self.items[idx]

# λ‚΄μž₯ ν•¨μˆ˜μ™€ 연동
collection = CustomCollection([1, 2, 3])
print(len(collection))  # 3
print(2 in collection)  # True
print(bool(collection)) # True
print(list(collection)) # [1, 2, 3]

βœ… μ»€μŠ€ν…€ 객체 톡합 팁:

  • μžμ‹ λ§Œμ˜ 객체λ₯Ό λ§Œλ“€ λ•Œ μ μ ˆν•œ 맀직 λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•˜λ©΄ λ‚΄μž₯ ν•¨μˆ˜μ™€ μžμ—°μŠ€λŸ½κ²Œ λ™μž‘ν•œλ‹€
  • __len__, __iter__, __contains__ 등은 μ‹œν€€μŠ€λ‚˜ μ»¬λ ‰μ…˜ λ™μž‘μ— μ€‘μš”ν•˜λ‹€
  • __bool__을 κ΅¬ν˜„ν•˜λ©΄ if obj: 같은 λΆˆλ¦¬μ–Έ μ»¨ν…μŠ€νŠΈμ—μ„œ λ™μž‘μ„ μ œμ–΄ν•  수 μžˆλ‹€
  • __getitem__을 κ΅¬ν˜„ν•˜λ©΄ 인덱싱과 μŠ¬λΌμ΄μ‹±μ„ 지원할 수 μžˆλ‹€


μ£Όμš” 팁

βœ… λ‚΄μž₯ ν•¨μˆ˜ μ‚¬μš© μ‹œ μ£Όμ˜μ‚¬ν•­:

  • ν˜•λ³€ν™˜ μ‹œ μ˜ˆμ™Έ 처리 ν•„μš”: 잘λͺ»λœ μž…λ ₯에 λŒ€ν•œ ValueError λ“± 처리
  • map/filterλŠ” iterator λ°˜ν™˜: ν•„μš”μ‹œ list() λ“±μœΌλ‘œ ꡬ체화 ν•„μš”
  • eval/exec μ‚¬μš© μ‹œ λ³΄μ•ˆ 주의: μ‹ λ’°ν•  수 μ—†λŠ” μž…λ ₯에 μ μš©ν•˜λ©΄ λ³΄μ•ˆ μœ„ν—˜
  • open ν›„ close ν•„μˆ˜: with ꡬ문으둜 μžλ™ 관리 ꢌμž₯
  • dir()둜 μ‚¬μš© κ°€λŠ₯ν•œ λ©”μ„œλ“œ 확인: 객체의 κ°€λŠ₯ν•œ μ—°μ‚° 탐색에 유용
  • λ‚΄μž₯ ν•¨μˆ˜ μ˜€λ²„λΌμ΄λ”© 주의: λ³€μˆ˜λͺ…μœΌλ‘œ sum, max λ“± μ‚¬μš© μ‹œ 원본 ν•¨μˆ˜ μ ‘κ·Ό λΆˆκ°€
  • 파이썬 버전 ν˜Έν™˜μ„± κ³ λ €: 버전에 따라 μ‚¬μš© κ°€λŠ₯ν•œ ν•¨μˆ˜ 달라짐
  • μ„±λŠ₯ μ΅œμ ν™”λŠ” μΈ‘μ • ν›„ μ§„ν–‰: μ‹€μ œ 병λͺ© 지점 νŒŒμ•… ν›„ μ΅œμ ν™”


⚠️ **GitHub.com Fallback** ⚠️