Advanced Python
์ด ๊ธ์ ์ ๋ฆฌ๋ฅผ ์ํด ๊ฐ์ธ์ ์ธ ์ฉ๋๋ก ์์ฑ๋ ํฌ์คํธ์ ๋๋ค. ์ง์ ๊ณผ ์กฐ์ธ์ ์ธ์ ๋ ํ์์ ๋๋ค ใ ใ
Iterable.
๋์ถฉ list
์ฒ๋ผ iteration์ ์ํํ ์ ์๋ ๋
์์ ํต์นญ iterable ์ด๋ผ๊ณ ํจ. ๋๋ for ... in ...
๋ก ์ํํ ์ ์๋ ๋
์์ด๋ผ๊ณ ์๊ฐํด๋ ๋ ๋ฏ.
mylist = [1, 2, 3]
mylist2 = [x * x for x in range(3)] # list comprehension
์ฐธ๊ณ ๋ก range(n)
, ์ด ๋
์๋ iterable์ด๋ค.
Generator.
generator ์ญ์ for ... in ...
์ผ๋ก ์ํํ ์ ์์. ๊ทธ๋ฐ๋ฐ ๋ชจ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ด๊ณ ์์ง ์๊ณ , ๊ทธ๋๊ทธ๋ ๊ฐ์ ์์ฑํด์ ๋ฐํํจ! ๊ทธ๋์ generator๋ฅผ ์ธ ๋๋ ํ๋ฒ์ ํ๋์ ๊ฐ๋ง ์ํํ ์ ์์!
mygenerator = (x * x for x in range(3)) # tuple comprehension
for i in mygenerator:
print(i)
list comprehension๊ณผ ๋ฌ๋ฆฌ tuple comprehension์ ๊ฒฝ์ฐ generator๋ฅผ ๋ฐํํ๋ค. ํ๋ ์์ฒด๋ iterable๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก for ... in ...
์ ํตํด ์ํํ ์ ์๋ค.
๊ทธ.๋ฌ.๋. iteration์ ๋ ๋ฒ ์ํํ ์๋ ์๋ค!! ์ฆ, generator๋ ํ๋ฒ๋ง ์ฌ์ฉํ ์ ์๋ค๋ ๋ง์ด๋ค. ๊ทธ๋์ for i in mygenerator
๋ฅผ ๋ค์ ์คํํด๋ ๋ค์๋ ์์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค. ํ๋ฒ์ผ๋ก ๋! ๐ฅ
์ด๋ฐ generator๋ฅผ ํจ์๋ก ๋ง๋ค ์๋ ์๋๋ฐ, ์ด ๊ฒฝ์ฐ yield
ํค์๋๋ฅผ ์ฌ์ฉํ๋ค.
def createGenerator(n):
for i in range(n):
yield i * i
Iterable๊ณผ Iterator.
tuple
, list
, str
๊ณผ ๊ฐ์ ๋
์์ iterable ์ด๋ผ๊ณ ํ๋ค. ์ด๋ฐ iterable์ iter()
๋ฅผ ์์ฐ๋ฉด ์ด ๋
์๋ค์ iterator ์ ์ป์ ์ ์๋ค!!
mytuple = ("apple", "banna", "cherry")
myiter = iter(mytuple)
์ฌ์ค python์ for ... in ...
๊ตฌ๋ฌธ์ ์์ฒด์ ์ผ๋ก iterator๋ฅผ ์์ฑํ๊ณ , ๋ฌธ๋จ์ ๋์ next()
๋ฅผ ํธ์ถํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค๊ณ ํ๋ค! ๐ฒ
Iterable๊ณผ Enumerator.
์๋์ ๋ ์ฝ๋๋ ๋์น๋ค.
# iterable with index
i = 0
for value in myIterable:
print(i, value)
i += 1
# iterable with enumerate
for i, value in enumerate(myIterable):
print(i, value)
for i, value in enumerate(myIterable, start=0):
print(i, value)
Lambda Function.
JS์ ์ต๋ช ํจ์์ ๋์น์.
square_fun = lambda x: x*x
exp_fun = lambda x, y: x**y
sign = lambda x: (1, -1)[x < 0] # "x < 0"์ ๊ฐ์ tuple์ idx๋ก ์ฌ์ฉ!