๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ ํŒŒ์ด์ฌ

Pythonic Code, ํŒŒ์ด์ฌ์Šค๋Ÿฌ์šด ์ฝ”๋“œ

Idiom์ด๋ž€ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ํŠน๋ณ„ํ•œ ๋ฐฉ๋ฒ•. ๋งค๋ฒˆ ๋™์ผํ•œ ๊ตฌ๋„๋ฅผ ๋ฐ˜๋ณตํ•ด ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ . ๋””์ž์ธ ํŒจํ„ด์€ ๊ณ ์ฐจ์›์ ์ธ ๊ฐœ๋…์œผ๋กœ ์ฝ”๋“œ๋กœ ๋ฐ”๋กœ ๋ณ€ํ™˜๋˜์ง€ ์•Š๋Š” ๋ฐ˜๋ฉด, idiom์€ ํŠน์ •ํ•œ ์ž‘์—…์„ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ๋งํ•œ๋‹ค. Idiom์€ ์‹ค์ œ ์ฝ”๋“œ์ด๋ฏ€๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋งˆ๋‹ค ๋‹ค๋ฅด๋‹ค. ํŠนํžˆ ํŒŒ์ด์ฌ์—์„œ๋Š” ํŒŒ์ด์ฌ ํŠน์œ ์˜ idiom์„ ๋”ฐ๋ฅธ ์ฝ”๋“œ๋ฅผ pythonicํ•˜๋‹ค๊ณ  ํ•œ๋‹ค.


index์™€ slice ์ดํ•ดํ•˜๊ณ  indexing ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•˜๊ธฐ.

Index  numbers[-1] 
ํŒŒ์ด์ฌ์—์„œ๋„ ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋‚˜ ํƒ€์ž…์—์„œ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•œ๋‹ค. ํŠน์ดํ•œ ์ ์€ ์Œ์ˆ˜ ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•ด ๋์—์„œ๋ถ€ํ„ฐ ์ ‘๊ทผ ๋˜ํ•œ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

Slice:  numbers[1:3] 
์Šฌ๋ผ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŠน์ • ๊ตฌ๊ฐ„์˜ ์š”์†Œ๋“ค์„ ํ•œ๊บผ๋ฒˆ์— ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
Interval = slice(์‹œ์ž‘ x ์ด์ƒ, y-1๊นŒ์ง€ ๊ฐ€์ ธ์˜จ๋‹ค)
Interval = slice(์‹œ์ž‘ x ์ด์ƒ:y-1๊นŒ์ง€ ๊ฐ€์ ธ์˜จ๋‹ค:z๊ฐœ์”ฉ ์ ํ”„ํ•˜์—ฌ)


์ธ๋ฑ์Šค์™€ ์Šฌ๋ผ์ด์Šค๋Š”  __getitem__  ์ด๋ž€ ๋งค์ง ๋งค์„œ๋“œ๋กœ ๋™์ž‘ํ•œ๋‹ค. 



์‹œํ€€์Šค๋ฅผ ์Šฌ๋ผ์ด์Šค ํ•ด์˜ค๋ฉด deepcopy ์ผ๊นŒ swallow copy ์ผ๊นŒ?

mutableํ•œ ์‹œํ€€์Šค๊ฐ์ฒด์ด๋ฉด deepcopy์ด๊ณ , immutableํ•œ ์‹œํ€€์Šค๋ฉด swallow copy์ด๋‹ค.



์‹œํ€€์Šค sequence: 

๋งค์ง ๋งค์„œ๋“œ  __getitem__  ๊ณผ  __len__  ์ด ๊ตฌํ˜„๋ผ ์žˆ๋Š” ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด. 

- list, tuple, string์€ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์žˆ๋Š” ์‹œํ€€์Šค ๊ฐ์ฒด์ด๋‹ค.


์ดํ„ฐ๋Ÿฌ๋ธ” iterable:

 for a in any_list: 

์—์„œ  any_list  ๋Š” iterable์ด๊ณ   for ๋ฌธ ์ „์ฒด๋Š”  iterator๋ฅผ ๋งŒ๋“ ๋‹ค.



์ปจํ…์ŠคํŠธ ๋งค๋‹ˆ์ € Context manager: 

ํŒŒ์ด์ฌ์—์„œ ์“ฐ๋Š” with ๋ฌธ์„ ๋งํ•œ๋‹ค. 

์ฃผ์š”ํ•œ ๋™์ž‘์˜ ์ „ํ›„์— ์ „์ฒ˜๋ฆฌ๋‚˜ ํ›„์ฒ˜๋ฆฌ ์ž‘์—…์ด ํ•„์š”ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ์— ๊ด€๋ จํ•ด ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ์ž๋ฅผ ์ž์ฃผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

e.g. ํ• ๋‹น๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ชจ๋‘ ๋‹ซ์•„์ฃผ๋Š” ์ž‘์—….
- ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ๋ˆ„์ถœ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ํŒŒ์ผ์„ ์˜คํ”ˆ ํ•œ ํ›„ ํ•„์š”ํ•œ ์ž‘์—…์„ ๋๋‚˜๋ฉด ๋‹ซ๋Š” ๊ฒƒ
- ์„œ๋น„์Šค๋‚˜ ์†Œ์ผ“์˜ ์—ฐ๊ฒฐ์„ ์—ด์—ˆ์„ ๋•Œ, ์ ์ ˆํ•œ ๋•Œ์— ๋‹ซ๊ฑฐ๋‚˜ ์ž„์‹œ ํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜๋Š” ๋“ฑ.



with๋ฌธ(pep-343):

with๋ฌธ์€ ๋งค์ง ๋งค์„œ๋“œ  __enter__  ์™€  __exit__  ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

์›ํ•˜๋Š” ๊ฐ์ฒด์—  __enter__  ์™€  __exit__  ๋งค์ง ๋งค์„œ๋“œ๋กœ ์ง์ ‘ ์ปจํ…์ŠคํŠธ ๋งค๋‹ˆ์ € ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.




magic method ํ™œ์šฉํ•˜๊ธฐ


ํŒŒ์ด์ฌ์—์„œ ์œ ๋ฐœ๋˜๋Š” ํ”ํ•œ ์‹ค์ˆ˜ ํŒŒ์•