๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ Python

์ดํŽ™ํ‹ฐ๋ธŒ ํŒŒ์ด์ฌ 1์žฅ - ํŒŒ์ด์ฌ๋‹ต๊ฒŒ ์ƒ๊ฐํ•˜๊ธฐ

by dev.py 2025. 3. 6.

Better Way 3. bytes์™€ str ์ฐจ์ด๋ฅผ ์•Œ์•„๋‘๋ผ

# ์ž˜๋ชป๋œ ์˜ˆ
print(b"hello" + "world")  # TypeError ๋ฐœ์ƒ

# ์˜ฌ๋ฐ”๋ฅธ ์˜ˆ
print(b"hello" + b"world")  # bytes๋ผ๋ฆฌ ๊ฒฐํ•ฉ ๊ฐ€๋Šฅ
print("hello" + "world")  # str๋ผ๋ฆฌ ๊ฒฐํ•ฉ ๊ฐ€๋Šฅ

bytes์™€ str์€ ๊ฒฐํ•ฉ์ด ๋ถˆ๊ฐ€๋Šฅ

 

# ํ…์ŠคํŠธ ๋ชจ๋“œ๋กœ ํŒŒ์ผ ์ฝ๊ธฐ (str ๋ฐ˜ํ™˜)
with open("example.txt", "r", encoding="utf-8") as f:
    text = f.read()
    print(text)

# ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ชจ๋“œ๋กœ ํŒŒ์ผ ์ฝ๊ธฐ (bytes ๋ฐ˜ํ™˜)
with open("example.txt", "rb") as f:
    binary_data = f.read()
    print(binary_data)

encode(), decode() ๊ธฐ๋ณธ๊ฐ’์€ utf-8 ์ด๋ฉฐ, ์ด๋ฅผ ์‚ฌ์šฉํ•˜์ž.

 

Better Way 5. ๋ณต์žกํ•œ ์‹ ๋Œ€์‹  ๋„์šฐ๋ฏธ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

# ๋ณต์žกํ•œ ์กฐ๊ฑด๋ฌธ (๋‚˜์œ ์˜ˆ)
if user.is_active and user.role == "admin" and user.has_permission("edit"):
    do_something()

# ๋„์šฐ๋ฏธ ํ•จ์ˆ˜ ํ™œ์šฉ (์ข‹์€ ์˜ˆ)
def is_admin_user(user):
    return user.is_active and user.role == "admin" and user.has_permission("edit")

if is_admin_user(user):
    do_something()

 

Better Way 6. ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ๋Œ€์ž…์„ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์–ธํŒจํ‚นํ•˜๋ผ

# ๋ฆฌ์ŠคํŠธ์—์„œ ์ธ๋ฑ์Šค๋กœ ๊ฐ’ ํ• ๋‹น (๋‚˜์œ ์˜ˆ)
data_list = [["Alice", 25, "Developer"], ["Bob", 30, "Designer"], ["Charlie", 35, "Manager"]]
for data in data_list:
    name = data[0]
    age = data[1]
    job = data[2]
    print(f"{name} is {age} years old and works as a {job}.")

# ์–ธํŒจํ‚น ์‚ฌ์šฉ (์ข‹์€ ์˜ˆ)
for name, age, job in data_list:
    print(f"{name} is {age} years old and works as a {job}.")

 

 

Better Way 7. range ๋ณด๋‹ค๋Š” enumerate๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

# range ์‚ฌ์šฉ (๋‚˜์œ ์˜ˆ)
items = ["apple", "banana", "cherry"]

for i in range(len(items)):
    print(f"{i+1}: {items[i]}")

# enumerate ์‚ฌ์šฉ (์ข‹์€ ์˜ˆ)
for i, item in enumerate(items, 1): # ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ ์‹œ์ž‘ ์ธ๋ฑ์Šค ์ง€์ • ๊ฐ€๋Šฅ - default๋Š” 0
    print(f"{i}: {item}")
    
    
>> 1: apple
>> 2: banana
>> 3: cherry

 

 

Better Way 8. ์—ฌ๋Ÿฌ ์ดํ„ฐ๋ ˆ์ดํ„ฐ์— ๋Œ€ํ•ด ๋‚˜๋ž€ํžˆ ๋ฃจํ”„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด zip์„ ์‚ฌ์šฉํ•˜๋ผ

names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]

# ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•œ ์˜ˆ
for i in range(len(names):
    print(f"{names[i]} is {ages[i]} years old.")

# zip์„ ์‚ฌ์šฉํ•œ ์˜ˆ
for name, age in zip(names, ages):
    print(f"{name} is {age} years old.")

 

๋งŒ์•ฝ์— ๊ธธ์ด๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ์‹œํ€€์Šค ๊ฐ์ฒด๋ผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

names = ["Alice", "Bob", "Charlie", "Delta"] # ๊ธธ์ด๊ฐ€ 4
ages = [25, 30, 35] # ๊ธธ์ด๊ฐ€ 3

# zip์„ ์‚ฌ์šฉํ•œ ์˜ˆ
for name, age in zip(names, ages):
    print(f"{name} is {age} years old.")
    
>> 	Alice is 25 years old.
	Bob is 30 years old.
	Charlie is 35 years old.

 

์งง์€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ธฐ์ค€์œผ๋กœ ๋ฐ˜๋ณต๋ฌธ์„ ์ˆ˜ํ–‰ํ•œ ํ›„, ์ข…๋ฃŒ๋œ๋‹ค.

๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์ƒ๊ฐํ•˜๋ฉด for ๋ฌธ์ด ์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ next() ํ˜ธ์ถœํ•˜๋‹ค๊ฐ€ StopIteration์„ ๋งŒ๋‚˜๋ฉด ์ข…๋ฃŒํ•˜๊ฒŒ ๋˜๋‹ˆ, ์งง์€์ชฝ์—์„œ ๋จผ์ € StopIteration์„ ๋ฐœ์ƒํ•œ ํ›„, ์ข…๋ฃŒํ•˜๊ฒŒ ๋œ๋‹ค.

 

๋งŒ์•ฝ ๊ธด ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ˜๋ณต๋ฌธ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด

from itertools import zip_longest

names = ["Alice", "Bob", "Charlie", "Delta"] # ๊ธธ์ด๊ฐ€ 4
ages = [25, 30, 35] # ๊ธธ์ด๊ฐ€ 3

# zip์„ ์‚ฌ์šฉํ•œ ์˜ˆ
for name, age in zip_longest(names, ages):
    print(f"{name} is {age} years old.")
    
>> 	Alice is 25 years old.
	Bob is 30 years old.
	Charlie is 35 years old.
	Delta is None years old.

 

๋‚ด์žฅ ํ•จ์ˆ˜์ธ zip_longest๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธด ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ธฐ์ค€์œผ๋กœ ๋ฐ˜๋ณต๋ฌธ์„ ์ˆ˜ํ–‰๋˜๊ณ , ๊ธธ์ด๊ฐ€ ๋ชจ์ž๋ž€ ๊ฒฝ์šฐ None ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

Better Way 10. ๋Œ€์ž…์‹์„ ์‚ฌ์šฉํ•ด ๋ฐ˜๋ณต์„ ํ”ผํ•˜๋ผ

# ๋Œ€์ž…์‹์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ (๋‚˜์œ ์˜ˆ)
value = input("Enter something: ")
while value:
    print(f"You entered: {value}")
    value = input("Enter something: ")

# ๋Œ€์ž…์‹ ์‚ฌ์šฉ (์ข‹์€ ์˜ˆ)
while (value := input("Enter something: ")):
    print(f"You entered: {value}")

:= (์™ˆ๋Ÿฌ์Šค) ์—ฐ์‚ฐ์ž๋กœ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉฐ, ๋น„๊ต ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

ํ•ด๋‹น ๊ฐ’์€ ํ•ด๋‹น ์Šค์ฝ”ํ”„์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅ

 

 

 

 

Effective Python 2nd ์ดํŽ™ํ‹ฐ๋ธŒ ํŒŒ์ด์ฌ : ํŒŒ์ด์ฌ ์ฝ”๋”ฉ์˜ ๊ธฐ์ˆ  : ๋„ค์ด๋ฒ„ ๋„์„œ

๋„ค์ด๋ฒ„ ๋„์„œ ์ƒ์„ธ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

search.shopping.naver.com