1. ํํ tuple
๐ ๋ฆฌ์คํธ์ ๋น์ทํ ์๋ฃํ์ด๋ ํ๋ฒ ๊ฒฐ์ ๋ ์์๋ฅผ ๋ฐ๊ฟ ์ ์๋ค๋ ๊ฒ์ด ๋ค๋ฅด๋ค.
โก๏ธ ์ด๋ฏธ ์ ์ฅ๋ ๊ฐ ์ด์ธ์๋ ์ถ๊ฐ, ์์ , ์ญ์ ๊ฐ ๋ถ๊ฐ๋ฅ
๐ ๋ฆฌ์คํธ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ ์์๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ์ธ๋ฑ์ค๊ฐ ๋ถ์ฌ๋๊ณ ์ฌ๋ผ์ด์ฑ๋ ์ง์
๐ ํํ์ ์๊ดํธ() ๋ tuple() ํจ์๋ฅผ ์ด์ฉํด์ ์์ฑ
๐ ๊ฐ๋ค์ ์ฝค๋ง(,)๋ก ๋ถ๋ฆฌํ์ฌ ์ ๋ฌํ๋ฉด ์๋์ผ๋ก ํํ์ด ์์ฑ
t1 = (1,2,3)
print(t1) # (1,2,3)
# ๊ดํธ ์์ด ์ฌ์ฉ ๊ฐ๋ฅ
t2 = 1,2,3
print(t2) #(1,2,3)
def sample():
return (1,2)
print(sample()) #(1, 2)
# ๊ฐ์ด 2๊ฐ ๋ฐํ๋ ๊ฒ์ด ์๋๋ผ ํํ์ ์๋์ผ๋ก ์ ์ฉํด์ ๋ฐํํจ
# ๋ฆฌ์คํธ๋ฅผ ํํ๋ก ๋ณ๊ฒฝ
t3 = tuple([100, 3.14, 'hello'])
print(t3) # (100, 3.14, 'hello')
# ๊ฐ์ 1๊ฐ๋ง ๋ณด๊ดํ๋ ํํ์ ์์ฑํ ๊ฒฝ์ฐ์๋ ๊ฐ๊ณผ ์ฝค๋ง(,)๋ฅผ ๋ฐ๋์ ํจ๊ป ์์ฑ
t4 = (100)
print(t4) # 100 / ๊ฐ์ผ๋ก ์ธ์
print(type(t4)) # <class 'int'>
t5 = (100, )
print(t5) # (100, ) / ํํ๋ก ์ธ์
print(type(t5)) # <class 'tuple'>
# ๊ฐ์ swap ๊ตํ
a = 10
b = 20
print(a, b) # 10 20
a, b = b, a # (a, b) = (b, a)
print(a, b) # 20 10
a, b = 100, 'ํ๊ธธ๋'
print(a) # 100
print(b) # ํ๊ธธ๋
2. ๋๋ค lambda
๐ ํจ์๋ฅผ ์งง๊ฒ ์ธ ์ ์๋ ํ์ด์ฌ์ ๋ฌธ๋ฒ
1) ์ฝ๋ฐฑ ํจ์ callback function
โก๏ธ ํจ์์ ๋งค๊ฐ๋ณ์์ ์ฌ์ฉํ๋ ํจ์
# ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ํจ์๋ฅผ 10๋ฒ ํธ์ถํ๋ ํจ์
def call_10_times(func):
for i in range(10):
func()
# ๊ฐ๋จํ ์ถ๋ ฅํ๋ ํจ์
def print_hello():
print("์๋
ํ์ธ์")
# ์กฐํฉํ๊ธฐ
call_10_times(print_hello)
# -> print_hello() ํจ์๋ฅผ 10๋ฒ ์คํ
2) filter() ํจ์์ map() ํจ์
โก๏ธ ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํ๋ ๋ํ์ ์ธ ํ์คํจ์
โก๏ธ map() ํจ์๋ ๋ฆฌ์คํธ์ ์์๋ฅผ ํจ์์ ๋ฃ๊ณ ๋ฆฌํด๋ ๊ฐ์ผ๋ก ์๋ก์ด ๋ฆฌ์คํธ๋ฅผ ๊ตฌ์ฑ
โก๏ธ filter() ํจ์๋ ๋ฆฌ์คํธ์ ์์๋ฅผ ํจ์์ ๋ฃ๊ณ ๋ฆฌํด๋ ๊ฐ์ด True์ธ ๊ฒ์ผ๋ก, ์๋ก์ด ๋ฆฌ์คํธ๋ฅผ ๊ตฌ์ฑ
# map()
map(ํจ์, ๋ฆฌ์คํธ)
# filter()
filter(ํจ์, ๋ฆฌ์คํธ)
def power(item):
return item * item
def under_3(item):
return item < 3
list_input_a = [1, 2, 3, 4, 5]
# map() ์ฌ์ฉ
output_a = map(power, list_input_a)
print(output_a) # <map object at 0x104c228f0>
print(list(output_a)) # [1, 4, 9, 16, 25]
# filter() ์ฌ์ฉ
output_b = filter(under_3, list_input_a)
print(output_b) # <filter object at 0x104c22800>
print(list(output_b)) # [1, 2]
๐พ <map object> ์ <filter object> ๋ฅผ ์ ๋๋ ์ดํฐ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
3) ๋๋ค์ ๊ฐ๋
โก๏ธ ๊ฐ๋จํ ํจ์๋ฅผ ์ฝ๊ฒ ์ ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ปํจ
# ๊ธฐ๋ณธํ์
lambda ๋งค๊ฐ๋ณ์: ๋ฆฌํด๊ฐ
list_input_a = [1, 2, 3, 4, 5]
# map() ํจ์
output_a = map(lambda x: x * x, list_input_a)
print(output_a) # <map object at 0x102d12860>
print(list(output_a)) # [1, 4, 9, 16, 25]
# filter() ํจ์
output_b = filter(lambda x: x < 3, list_input_a)
print(output_b) # <filter object at 0x102d61810>
print(list(output_b)) # [1, 2]
3. ์ ๋๋ ์ดํฐ generator
๐ ์ดํฐ๋ ์ดํฐ๋ฅผ ์ง์ ๋ง๋ค ๋ ์ฌ์ฉํ๋ ์ฝ๋
๐ ํจ์ ๋ด๋ถ์ yield ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น ํจ์๋ ์ ๋๋ ์ดํฐ ํจ์๊ฐ ๋๋ค.
๐ ์ผ๋ฐ ํจ์์ ๋ฌ๋ฆฌ ํจ์๋ฅผ ํธ์ถํด๋ ํจ์ ๋ด๋ถ์ ์ฝ๋๊ฐ ์คํ๋์ง ์๋๋ค.
def test():
print("ํจ์๊ฐ ํธ์ถ๋์์ต๋๋ค")
yield "test"
print("A ์ง์ ํต๊ณผ") # A ์ง์ ํต๊ณผ
test()
print("B ์ง์ ํต๊ณผ") # B ์ง์ ํต๊ณผ
test()
print(test()) # <generator object test at 0x104ceda10>
๐ ์ ์์ ์์ test()ํจ์๋ ์ถ๋ ฅ๋์ง ์๊ณ , ์ ๋๋ ์ดํฐ๋ฅผ ๋ฆฌํดํ๋ค.
๐ ์ ๋๋ ์ดํฐ ๊ฐ์ฒด๋ next() ํจ์๋ฅผ ์ฌ์ฉํด ํจ์ ๋ด๋ถ ์ฝ๋๋ฅผ ์คํํ๋ค.
โก๏ธ ์ด๋ yield ํค์๋ ๋ถ๋ถ๊น์ง๋ง ์คํํ๋ฉฐ, next() ํจ์์ ๋ฆฌํด๊ฐ์ผ๋ก yield ํค์๋ ๋ค์ ์ ๋ ฅํ ๊ฐ์ด ์ถ๋ ฅ๋๋ค
def test():
print("A ์ง์ ํต๊ณผ")
yield 1
print("B ์ง์ ํต๊ณผ")
yield 2
print("C ์ง์ ํต๊ณผ")
output = test()
# next() ํจ์ ํธ์ถ
print("D ์ง์ ํต๊ณผ")
a = next(output)
print(a)
print("E ์ง์ ํต๊ณผ")
b = next(output)
print(b)
print("F ์ง์ ํต๊ณผ")
c = next(output)
print(c)
next(output)
๐ next() ํจ์๋ฅผ ํธ์ถํ ๋๋ง๋ค ํจ์ ๋ด๋ถ์ ๋ด์ฉ์ด ์งํ
๐ next() ํจ์๋ฅผ ํธ์ถํ ์ดํ yield ํค์๋๋ฅผ ๋ง๋์ง ๋ชปํ๊ณ ํจ์๊ฐ ๋๋๋ฉด StopIteration ์ด๋ผ๋ ์์ธ๊ฐ ๋ฐ์
[ ๋ด์ฉ์ฐธ๊ณ : ์ฑ 'ํผ์ ๊ณต๋ถํ๋ ํ์ด์ฌ' ]