Looping Dictionary
- Dictionary ๋ฅผ ์ฌ์ฉํ for ๋ฐ๋ณต๋ฌธ์์๋ ๊ฐ ์์์ key ๊ฐ๋ง return ํ๋ค.
>>> hr_info = {"์ด๋ฆ":"์ตํ๋ฆผ", "๋์ด":23, "์ทจ๋ฏธ":"์ฝ๋ฉ"}
>>> for each_key in hr_info:
print(each_key)
์ด๋ฆ
๋์ด
์ทจ๋ฏธ
Looping Dictionary With Values Instead of Keys
- value๊ฐ์ผ๋ก loopingํ๋ ๋ฒ
- Dictionary๋ values() ๋ผ๋ ํจ์๋ฅผ ์์ฑ์ผ๋ก ๊ฐ์ง๊ณ ์๋๋ฐ, ์ด values() ํจ์๋ dictionary์ value ๋ค์ list ์ ํํ๋ก return ํด์ค๋ค.
>>> hr_info = {"์ด๋ฆ":"์ตํ๋ฆผ", "๋์ด":23, "์ทจ๋ฏธ":"์ฝ๋ฉ"}
>>> for each_value in hr_info.values():
print(each_value)
์ตํ๋ฆผ
23
์ฝ๋ฉ
Looping Dictionary With Both Keys And Values
- key์ value ๊ฐ ๋๋ค ๊ฐ์ง๊ณ for ๋ฐ๋ณต๊ตฌ๋ฌธ์ ์คํ ํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
- key์ value ๊ฐ ๋๋ค ๊ฐ์ง๊ณ for ๊ตฌ๋ฌธ์ ์คํํ๊ธฐ ์ํด์๋ items() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
- Dictionary์ items() ํจ์๋ key์ value๋ฅผ tuple๋ก ๋ฆฌํดํด์ค๋ค.
- ๊ทธ๋ฌ๋ฏ๋ก for ๋ฐ๋ณต๊ตฌ๋ฌธ์์ 2๊ฐ์ ๊ฐ์ ๋์์ ๋ฐ๊ฒ ๋๋ค.
>>> hr_info = {"์ด๋ฆ":"์ตํ๋ฆผ", "๋์ด":23, "์ทจ๋ฏธ":"์ฝ๋ฉ"}
>>> for each_key, each_value in hr_info.items():
print(each_key, each_value)
์ด๋ฆ ์ตํ๋ฆผ
๋์ด 23
์ทจ๋ฏธ ์ฝ๋ฉ
Nested Function
- ๋ค๋ฅธ ๊ตฌ๋ฌธ๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํจ์๋ ํจ์์์ ์ค์ฒฉ๋์ด ์ ์ธ๋ ์ ์๋ค.
- ์ฆ ํจ์ ์์ ํจ์๋ฅผ ์ ์ธํ ์ ์๋ค.
>>> def parent_function():
def child_function():
print('this is a child function')
child_function()
>>> parent_function()
this is a child function
- ์ค์ฒฉ ํจ์์์ ๋ด๋ถ ํจ์๋ ํจ์์์์๋ง ํธ์ถ๋ ์ ์๋ค.
- ๋ถ๋ชจ ํจ์ ๋ฐ์์ ์์ ํจ์๋ ์คํ ๋ ์ ์๋ค.
- ์ ์ฝ๋์์๋ child_function()์ parent_function ๋ฐ์์ ์คํ๋ ์ ์๋ค.
Why use nested function?
- ์ ์ค์ฒฉ ํจ์๋ฅผ ์ด์ฉํ ๊น?
(1) ๊ฐ๋
์ฑ
(2) Closure
Closure
- ์ค์ฒฉ ํจ์๊ฐ ๋ถ๋ชจ ํจ์์ ๋ณ์๋ ์ ๋ณด๋ฅผ ๊ฐ๋์ด ์ฌ์ฉํ๋ ๊ฒ์ closure๋ผ๊ณ ํ๋ค.
- ์ค์ฒฉ ํจ์๊ฐ ๋ถ๋ชจ ํจ์์ ๋ณ์๋ ์ ๋ณด๋ฅผ ์ค์ฒฉ ํจ์ ๋ด์์ ์ฌ์ฉํ๋ค.
- ๋ถ๋ชจ ํจ์๋ ๋ฆฌํด๊ฐ์ผ๋ก ์ค์ฒฉ ํจ์๋ฅผ ๋ฆฌํดํ๋ค.
- ๋ถ๋ชจ ํจ์์์ ๋ฆฌํด ํ์ผ๋ฏ๋ก ๋ถ๋ชจ ํจ์์ ๋ณ์๋ ์ง์ ์ ์ธ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ์ง๋ง ๋ถ๋ชจ ํจ์๊ฐ ๋ฆฌํดํ ์ค์ฒฉ ํจ์๋ฅผ ํตํด์ ์ฌ์ฉ๋ ์ ์๋ค.
Closure๋ ์ธ์ ์ฌ์ฉ๋ ๊น?
- ์ด๋ ํ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฐ์ฐ์ ์คํํ๊ณ ์ถ์ง๋ง ๊ธฐ๋ฐ์ด ๋๋ ์ ๋ณด๋ ์ ๊ทผ์ ์ ํํ์ฌ ๋
ธ์ถ์ด ๋๊ฑฐ๋ ์์ ์ด ๋์ง ๋ชปํ๊ฒ ํ๊ณ ์ถ์๋ ์ฌ์ฉํ๋ค.
- factory ํจํด์ ๊ตฌํํ ๋ ์ฌ์ฉ๋๋ค.
- factory๋ ๊ณต์ฅ์ด๋ ๋ป์ด๋ค.
- ์ฆ ๋ญ๊ฐ๋ฅผ ์์ฑํด๋ด๋ ํจํด์ด๋ค.
- ์ฃผ๋ก ํจ์๋ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํด๋ด๋๋ฐ ์ฌ์ฉ๋๋ค.
- Factory์์ ๋ญ๊ฐ๋ฅผ ์์ฑํด ๋ด๊ธฐ ์ํด์๋ ์ค์ ๊ฐ์ด ํ์ํ ๊ฒ์ด๋ค.
- ๊ทธ ์ค์ ๊ฐ์ ๋
ธ์ถํ์ง ์์์ ์์ ์ด ๋ถ๊ฐ๋ฅํ๊ฒ ํ๋ฉด์ ํด๋น ์ค์ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋กํ ์ฐ์ฐ์ ํ ์ ์๋ ํจ์๋ฅผ ๋ง๋ค๋ closure๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
Decorator
- ํน์ ํจ์๋ฅผ ์คํํ๊ธฐ ์ ๊ฐ์ ์ ์ผ๋ก ๋ค๋ฅธ ํจ์๊ฐ ๋จผ์ ์คํ๋ ํ ์คํ๋๋๋ก ํ๋ ๊ฐ์ ์ฑ ์ ๊ณต
@is_paid_user
def jackpot_stock_information():
return "๊ณ์๊ฐ ๋ด๋ ค์ก์ต๋๋ค. ์ผ์ฑ์ ์๋ฅผ ์ฌ์ธ์!"
jackpot_stock_information
ย ํจ์ ์ ์ ์์ย is_paid_user
ย ํจ์๊ฐ ๊ณจ๋ฑ
์ด ๋งํฌ (@
) ์ ํจ๊ป ๋ฌ๋ ค์๋๊ฒ์ ๋ณผ ์ ์๋ค.
- ๊ทธ๋์ย
์ฅ์
, ์ฆย decorator
ย ๋ผ๊ณ ํ๋๊ฒ์ด๋ค.
- ํจ์์์ ๋ค๋ฅธ ํจ์๋ฅผ ๊ณจ๋ฑ
์ด๋งํฌ๋ฅผ ์ฌ์ฉํด์ ์ฅ์์ฒ๋ผ ๋ฌ์๋๋๊ฒ์ด๋ค.
- ์ ๋ ๊ฒ decorator๋ก ๋ฌ์๋์ผ๋ฉด ํด๋น ํจ์๊ฐ ํธ์ถ ๋๊ธฐ ์ ์ ์ฅ์์ผ๋ก ๋ฌ๋ฆฐ ํจ์๊ฐ ๋จผ์ ํธ์ถ์ด ๋๊ณ ๋ ํ์ ๋ณธ ํจ์๊ฐ ํธ์ถ์ด ๋๋ค.
Scope
- Scope์ ๋ฒ์๋ผ๋ ๋ป์ด๋ค.
- ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ scope์ ์ด๋ ํ ๊ฐ์ฒด (๋ณ์, ํจ์ ๋ฑ)๊ฐ ์ ํจํ ๋ฒ์๋ฅผ ์ด์ผ๊ธฐ ํ๋ค.
- ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ํด๋น ๊ฐ์ฒด๋ ์ฌ์ฉ๋ ์ ์๋ค.
- Python์์ scope์ ํญ์ ๊ฐ์ฒด๊ฐ ์ ์ธ๋ ์ง์ ์์ ์๋ก๋ ์์ ๊ฐ์ฒด ๊น์ง, ์๋๋ก๋ ๋ชจ๋ ํ์ ๊ฐ์ฒด๋ค๊ณผ ๊ทธ ์์๊น์ง๊ฐ ๋ฒ์์ด๋ค.
Scope ๋ฒ์
- Local Scope
- Enclosed Scope
- Global Scope
- Built-in Scope
Local Scope
- Local scope์ ๊ฐ์ง๊ณ ์๋ ๋ณ์๋ ํจ์ ํน์ ๊ฐ์ฒด๋ ์ด๋ฆ ๊ทธ๋๋ก ํน์ ๋ฒ์์์๋ง ์ ํจํ๋ค.
- ์ฃผ๋ก ํจ์ ์์์ ์ ์ธ๋ ๋ณ์๋ ํจ์๊ฐ local scope์ ๊ฐ์ง๊ณ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ๋ณ์๋ค์ ํด๋น ํจ์ ์์์๋ง ์ ํจํ๋ค.
Enclosed Scope
- Enclosing Scope๋ ์ค์ฒฉํจ์๊ฐ ์์๋ ์ ์ฉ๋๋ scope๋ค.
- ๋ถ๋ชจ ํจ์์์ ์ ์ธ๋ ๋ณ์๋ ์ค์ฒฉํจ์ ์์์๋ ์ ํจํ ๋ฒ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
Global Scope
- Global scope์ ํจ์ ์์์ ์ ์ธ๋๊ฒ์ด ์๋ ํจ์ ๋ฐ์์ ์ ์ธ๋ ๋ณ์๋ ํจ์๋ฅผ ์ด์ผ๊ธฐ ํ๋ค.
- ๋ณ์๋ ํจ์๋ ์ ์ธ๋ ์ง์ ๊ณผ ๋์ผํ level์ ์ง์ญ, ๊ทธ๋ฆฌ๊ณ ๋ ์์ชฝ์ ์ง์ญ๋ค๊น์ง ๋ฒ์๊ฐ ์ ํจํฉ๋๋ค.
- global scope์ ๊ฐ์ง๊ณ ์๋ ๋ณ์์ ํจ์๋ค์ ์ ์ธ๋ ์ง์ ์ด ํด๋น ํ์ผ์์ ๊ฐ์ฅ ๋ฐ๊นฅ์ชฝ์์ ์ ์ธ๋๋ฏ๋ก ํด๋น ํ์ผ์์ ์ ์ธ๋ ์ง์ ์๋๋ก๋ ๋ค ์ ํจํ ๋ฒ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ๊ทธ๋์ "Global" scope ์ด๋ผ๊ณ ํ๋ ๊ฒ์ด๋ค.
Built-in Scope
- Built-in scope์ scope์ค ๊ฐ์ฅ ๊ด๋ฒ์ํ scope๋ค.
- ํ์ด์ฌ์์ ๋ด์ฅ๋์ด ์๋, ํ์ด์ฌ์ด ์ ๊ณตํ๋ ํจ์ ๋๋ ์์ฑ๋ค์ด built-in scope๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- built-in scope๋ ๋ฐ๋ก ์ ์ธ์ด ์์ด๋ ๋ชจ๋ ํ์ด์ฌ ํ์ผ์์ ์ ํจํ ๋ฒ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ์๋ฅผ ๋ค์ด, list๋ฑ๊ณผ ๊ฐ์ ์๋ฃ๊ตฌ์กฐ์ element ์ด ๊ฐ์๋ฅผ ๋ฆฌํดํ๋ len ํจ์๊ฐ ๋ฐ๋ก built-in scope๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
Shadowing
- ํ์ด์ฌ์ ๋ณ์๋ ํจ์์ ์ ์๋ฅผ ์ฐพ์๋ ๋ค์ ์์์ scope๋ค ์์์ ์ฐพ๋๋ค.
- Local => Enclosing => Global => Built-in
- ์ฆ ๊ฐ์ฅ ์ข์ ์ ํจ๋ฒ์ ๋ถํฐ ์์ ํด์ ๋์ ๋ฒ์๋ก ๋์๊ฐ๋ฉฐ ์ฌ์ฉ๋๋ ๋ณ์๋ ํจ์์ ์ ์๋ฅผ ์ฐพ๋๋ค.
- ๋ง์ผ ๋์ผํ ์ด๋ฆ์ ๋ณ์๋ค์ด ์๋ก ๋ค๋ฅธ scope์์ ์ ์ธ์ด ๋๋ฉด ๋ ์ข์ ๋ฒ์์ ์๋ ๋ณ์(ํน์ ํจ์)๊ฐ ๋ ๋์ ๋ฒ์์ ์๋ ๋ณ์๋ฅผ ๊ฐ๋ฆฌ๋ (shadowing)ํจ๊ณผ๊ฐ ๋ํ๋๋ค.
class
- ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์ถ์ํ๋ ํ์ค์ ๊ฐ๋
์ ๊ตฌ์ฒด์ ์ธ ํ์ด์ฌ ์ฝ๋๋ก ํํํ๊ธฐ ์ํด์์ด๋ค.
- ๊ทธ ์ค ์ฝ๋ฉ์์ ์ฌ์ฉ๋๋ class ๋ผ๋ ๋จ์ด๊ฐ ๊ฐ์ง๋ ์๋ฏธ๋ "๋ถ๋ฅ"์ ๊ฐ์ฅ ๊ฐ๊น๋ค.
- "๋์ผํ ๋ฒ์ฃผ์ ์ํ๋ ๋์๋ค์ ์ผ์ ํ ๊ธฐ์ค์ ๋ฐ๋ผ ๋๋์ด ๋์ ๊ฐ๋"
class Cat:
def meow(self):
print("์ผ์น ์ผ์น")
cat1 = Cat()
cat1.meow
- ํด๋์ค๋ฅผ ์ด์ฉํ๋ฉด ๋ ํธ๋ฆฌํ๊ฒ ํจ์๋ฅผ ์ ์ํ ์ ์๋ค.
- ํด๋์ค์์ self๋ ์๊ธฐ ์์ ์ ์๋ฏธํ๋ค.
- ํด๋์ค ๋ด์์ ์์ฑ๋ ํจ์๋ฅผ ๋ฉ์๋๋ผ๊ณ ํ๋ค.
- ๋ฉ์๋์ ์ฒซ๋ฒ์งธ ์ธ์๋ self๋ค.
- object = instance
- object๋ฅผ ๋จ๋
์ผ๋ก ์ง์นญํ ๋๋ object๋ผ๊ณ ๋ถ๋ฅด๊ณ ํด๋์ค์ ์ฐ๊ด์ง์ด์ ๋งํ ๋๋ instance๋ผ๊ณ ๋ถ๋ฅธ๋ค.
class name
- class ์ด๋ฆ์ ๊ฐ ๋จ์ด์ ์๊ธ์๋ฅผ ๋๋ฌธ์๋ก ์ฌ์ฉํ๋ค.
- ๋ง์ผ ํ๋จ์ด ์ด์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค๋ฉด ๋ฐ์ค(underscore) ์์ด ๋ชจ๋ ๋จ์ด๋ฅผ ๋ค ๋ถ์ด๋ ๊ฐ ๋จ์ด์ ์๊ธ์๋ ๋๋ฌธ์๋ก ํด์ ๋จ์ด๋ฅผ ๊ตฌ๋ถํ๊ฒ ๋๋ค.
- ex) ScotchWishkey, SomeReallyLongClassName
class Cookie:
pass
chococookie = Cookie()
- ํด๋์ค๋ฅผ ์ ์ํ ํ ํด๋์ค๋ฅผ ์ค์ฒดํํ ์ ์๋ค.
- ๊ฐ์ฒด๋ฅผ ํด๋์ค์ ํ ๋นํ๋ฉด ํด๋์ค๊ฐ ์ค์ฒดํ๋๋ค.
- Car class๋ฅผ ์ค์ฒด(instance)ํ ํ๊ฒ์ด chococookie๋ผ๋ ๊ฐ์ฒด(object) ์ธ๊ฒ์ด๋ค.
>>> class Cookie:
def __init__(self, shape, color):
self.shape = shape
self.color = color
- ํด๋์ค์ ๊ณตํต๋ถ๋ชจ๋ฅผ ๋ฉ์๋๋ฅผ ํตํด ์ ์ํ ์ ์๋ค.
- init ๋ฉ์๋
- ์๋ค๋ก ๋ฐ์ค 2๊ฐ๊ฐ ์๋ ๋ฉ์๋๋ค์ special methods๋ผ๊ณ ํ๋ค.
- init ๋ฉ์๋๋ class๊ฐ ์ค์ฒดํ ๋ ๋ ์ฌ์ฉ๋๋ ํจ์๋ค.
- init ๋ฉ์๋๋ ํด๋์ค๊ฐ ์ค์ฒดํ ๋ ๋ ์๋์ผ๋ก ํธ์ถ์ด ๋๋ค.
- init ๋ฉ์๋์ self ํ๋ผ๋ฏธํฐ๋ ํด๋์ค๊ฐ ์ค์ฒดํ๋ ๊ฐ์ฒด๋ฅผ ๋๊ฒจ์ฃผ์ด์ผ ํ๋ฉฐ, ํ์ด์ฌ์ด ์๋์ผ๋ก ๋๊ฒจ์ค๋ค.
- init ๋ฉ์๋์ self ํ๋ผ๋ฏธํฐ๋ ํญ์ ์ ์๋์ด์ผ ์์ด์ผ ํ๋ฉฐ ๋งจ ์ฒ์ ํ๋ผ๋ฏธํฐ๋ก ์ ์ ๋์ด์ผ ํ๋ค (๊ทธ๋์ผ ํ์ด์ฌ์ด ์์์ ๋๊ฒจ์ค ์ ์์ผ๋ฏ๋ก)
Class Method
- ํด๋์ค์์ init ๋ง๊ณ ๋ ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ์ํ๋ ๋๋ก ์ถ๊ฐํ ์ ์๋ค.
- Method์ attribute(์์ฑ)์ ์ฐจ์ด๋ ๋ช
์ฌ์ ๋์ฌ์ ์ฐจ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
- ์์ฑ์ ํด๋น ๊ฐ์ฒด์ ์ด๋ฆ ๋ฑ์ ์ ํด์ง ์ฑ์ง์ธ ๋ฐ๋ฉด์ ๋ฉ์๋๋ move, eat ๋ฑ ๊ฐ์ฒด๊ฐ ํํ ์ ์๋ ์ด๋ ํ action๊ฐ์ ๋๋์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.