Better way 11 ์ํ์ค๋ฅผ ์ฌ๋ผ์ด์ฑํ๋ ๋ฐฉ๋ฒ์ ์ตํ๋ผ
a = ['a', 'b', 'c', 'd', 'e']
# ์ฒ์ ๋๋ ๋๊น์ง ์ฌ๋ผ์ด์ฑ ํ ๋๋ ์ฒ์๊ณผ ๋ ์ธ๋ฑ์ค๋ฅผ ์๋ตํ์
assert a[:5] == a[0:5] # True
assert a[5:] == a[5:len(a)] # True
# ์ฌ๋ผ์ด์ฑ ๊ฒฐ๊ณผ๋ ์๋ก์ด ๊ฐ์ฒด
b = a[3:]
assert a is b # False (๋ค๋ฅธ ๊ฐ์ฒด)
assert a[3:] == b # True
# ์์๊ณผ ๋ ์ธ๋ฑ์ค ์๋ตํ๋ฉด ์๋ ๋ฆฌ์คํธ๋ฅผ ๋ณต์ฌํ ๋ฆฌ์คํธ
b = a[:]
print(b)
>>> ['a', 'b', 'c', 'd', 'e']
Better way 12 ์คํธ๋ผ์ด๋์ ์ฌ๋ผ์ด์ค๋ฅผ ํ ์์ ํจ๊ป ์ฌ์ฉํ์ง ๋ง๋ผ
# ์ฌ๋ผ์ด๋ list[์์:๋:์ฆ๊ฐ๊ฐ]
x = ['๋นจ๊ฐ', '์ฃผํฉ', '๋
ธ๋', '์ด๋ก', 'ํ๋', '์์ฃผ']
odds = x[::2] # ['๋นจ๊ฐ', '๋
ธ๋', 'ํ๋']
evens = x[1::2] # ['์ฃผํฉ', '์ด๋ก', '์์ฃผ']
# ๋ฐ์ดํธ ๋ฌธ์์ด ๋ฐ ์ ๋์ฝ๋ ๋ฌธ์์ด๋ ๊ฐ๋ฅ
x = b'mongoos'
y = x[::-1] # b'esoognom'
x = 'ๆฅๅค็งๅฌ'
y = x[::-1] # ๅฌ็งๅคๆฅ
๋ค๋ง ์ฌ๋ผ์ด์ฑ ๊ตฌ๋ฌธ์ ์์:๋:์ฆ๊ฐ๊ฐ ์ ๋ชจ๋ ๋ฃ์ผ๋ฉด ํผ๋์ค๋ฌ์ฐ๋ ํผํ์
x = ['a', 'b', 'c', 'd', 'e'] # ['d', 'b'] ๋ก ์ฌ๋ผ์ด์ฑ ๋ฐ ์คํธ๋ผ์ด๋(step) ํ๊ณ ์ถ์ ๊ฒฝ์ฐ
# ํผ๋์ค๋ฌ์ด ์์
x[-2:2:-2] # ['d']
x[-2::-2] # ['d', 'b']
x[2:2:-2] # []
# ์คํธ๋ผ์ด๋ฉ๊ณผ ์ฌ๋ผ์ด์ฑ์ ๋ถ๋ฆฌํ์
# - ๋จผ์ ์ฌ๋ผ์ด์ฑ ์ํ
y = x[1:4] # ['b', 'c', 'd']
# - ์ดํ ์คํธ๋ผ์ด๋ฉ ์ ์ฉ
z = y[::-2] # ['d', 'b']
Better way 13 ์ฌ๋ผ์ด์ฑ๋ณด๋ค๋ ๋๋จธ์ง๋ฅผ ๋ชจ๋ ์ก์๋ด๋ ์ธํจํน์ ์ฌ์ฉํ๋ผ
๋ณํ์ (starred expression)์ ์ฌ์ฉํ์
# ์ ์ข์ ์์ - ์ฌ๋ผ์ด์ฑ
values = [1, 2, 3, 4, 5]
first = values[0]
middle = values[1:-1]
last = values[-1]
# ์ข์ ์์ - ์ธํจํน(*)
values = [1, 2, 3, 4, 5]
first, *middle, last = values
Better way 16 in์ ์ฌ์ฉํ๊ณ ๋์ ๋๋ฆฌ ํค๊ฐ ์์ ๋ KeyError๋ฅผ ์ฒ๋ฆฌํ๊ธฐ๋ณด๋ค๋ get์ ์ฌ์ฉํ๋ผ
user_info = {'name': 'Alice'}
# ์ ์ข์ ์์ - ์กฐ๊ฑด๋ฌธ
if 'age' in user_info:
user_age = user_info['age']
else:
user_age = 'Unknown'
# ์ ์ข์ ์์ - ์์ธ์ฒ๋ฆฌ
try:
user_age = user_info['age']
except KeyError:
user_age = 'Unknown'
# ์ข์ ์์ - get() ์ฌ์ฉ
user_age = user_info.get('age', 'Unknown')
Better way 17 ๋ด๋ถ ์ํ์์ ์์๊ฐ ์๋ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํ ๋๋ setdefault๋ณด๋ค defaultdict๋ฅผ ์ฌ์ฉํ๋ผ
key = "key"
new_item = "new"
# ์ ์ข์ ์์ - ์กฐ๊ฑด๋ฌธ
data_store = {}
if key not in data_store:
data_store[key] = []
data_store[key].append(new_item)
# ์ ์ข์ ์์ - setdefault
data_store = {}
data_store.setdefault('key', []).append(new_item)
# ์ข์ ์์ - defaultdict
data_store = defaultdict(list)
data_store['key'].append(1
Better way 18 __missing__์ ์ฌ์ฉํด ํค์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ํดํธ ๊ฐ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์์๋๋ผ
# ์ ์ข์ ์์ - ๋งค๋ฒ get() ํ๋ฃกํ์ฌ ๊ธฐ๋ณธ๊ฐ ์ค์
default_dict = {}
default_value = default_dict.get('unknown', f"Default value for unknown")
print(default_value) # Default value for unknown
# ์ข์ ์์ - ๋ด์ฅ ํจ์ __missing__ ์ ๊ตฌํํ์ฌ ๊ธฐ๋ณธ๊ฐ ์ค์
class DefaultDict(dict):
def __missing__(self, key):
return f"Default value for {key}"
custom_dict = DefaultDict()
print(custom_dict['unknown']) # Default value for unknown
Effective Python 2nd ์ดํํฐ๋ธ ํ์ด์ฌ : ํ์ด์ฌ ์ฝ๋ฉ์ ๊ธฐ์ : ๋ค์ด๋ฒ ๋์
๋ค์ด๋ฒ ๋์ ์์ธ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
search.shopping.naver.com
'๐ Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ดํํฐ๋ธ ํ์ด์ฌ 4์ฅ - ์ปดํ๋ฆฌํจ์ ๊ณผ ์ ๋๋ ์ดํฐ (0) | 2025.03.18 |
---|---|
์ดํํฐ๋ธ ํ์ด์ฌ 3์ฅ - ํจ์ (0) | 2025.03.17 |
์ดํํฐ๋ธ ํ์ด์ฌ 1์ฅ - ํ์ด์ฌ๋ต๊ฒ ์๊ฐํ๊ธฐ (0) | 2025.03.06 |
[Python] *, ** ์ฌ์ฉ๋ฒ (0) | 2025.02.18 |
[Python] GIL์ ํด์ ํด๋ณด์ (0) | 2024.10.11 |