๋๋ค ํจ์
`lambda` ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํ๋ ์ต๋ช ํจ์
- ํจ์ ์ด๋ฆ ์์ด ์งง๊ณ ๋จ์ํ ๋ก์ง์ ์์ฑํ ๋ ์ ์ฉ
- ์ธ์ ์ฌ์ฉ?
- ์ํฉ : ์งง์ ํจ์๋ฅผ ํ์ค๋ก ํํํ๊ณ ์ถ์ ๋, map() filter() sort() ๋ฑ๊ณผ ํจ๊ป ์ฌ์ฉ
- ์ฌ์ฉ ์ด์ : ์ฝ๋์ ๊ฐ๊ฒฐ์ฑ, ๊ฐ๋จํ ๋ณํ์ ์ฝ๊ฒ ์ ์ฉ
# ์ผ๋ฐ ํจ์ ์ ์
def add(x, y):
return x + y
# ๋๋ค ํจ์ ์ ์
add_lambda = lambda x, y: x + y
# ๊ฒฐ๊ณผ ํ์ธ
print(add(3, 5)) # ์ถ๋ ฅ: 8
print(add_lambda(3, 5)) # ์ถ๋ ฅ: 8
# ํจ์ ์ด๋ฆ ์์ด ๋ฐ๋ก ์ฌ์ฉ (์ ๋ ฌ ํ์ฉ)
data = [(1, 2), (3, 1), (5, 0)]
# ๋ ๋ฒ์งธ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
sorted_data = sorted(data, key=lambda x: x[1])
print(sorted_data) # ์ถ๋ ฅ: [(5, 0), (3, 1), (1, 2)]
ํด๋์ค, ์ธ์คํด์ค, ์์ฑ
ํด๋์ค
- ํด๋์ค = ์ค๊ณ๋
- ๊ฐ์ฒด (์ธ์คํด์ค)๋ฅผ ๋ง๋ค๊ธฐ ์ํ ํ๋ก, ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์ ์ํจ
class Person:
def __init__(self, name, age):
self.name = name # ์ด๋ฆ ์์ฑ
self.age = age # ๋์ด ์์ฑ
def say_hello(self): # ๋ฉ์๋ (๋์)
print(f"์๋
ํ์ธ์, ์ ์ด๋ฆ์ {self.name}์
๋๋ค!")
์ธ์คํด์ค
- ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋ ์ค์ ๊ฐ์ฒด
- ํด๋์ค = ์ค๊ณ๋, ์ธ์คํด์ค = ์ค๊ณ๋๋ฅผ ๋ฐํ์ผ๋ก ๋ง๋ค์ด์ง ์ค์ ๋ฌผ๊ฑด
person1 = Person("์ง์", 25) # ์ธ์คํด์ค ์์ฑ
person2 = Person("๋ฏผ์", 30) # ์ธ์คํด์ค ์์ฑ
# ๊ฐ ์ธ์คํด์ค๋ ๋
๋ฆฝ์ ์ผ๋ก ์กด์ฌ
print(person1.name) # ์ถ๋ ฅ: ์ง์
print(person2.name) # ์ถ๋ ฅ: ๋ฏผ์
์์ฑ
: ํด๋์ค๋ ์ธ์คํด์ค๊ฐ ์ ์ฅํ๊ณ ์๋ ๋ฐ์ดํฐ
1. ํด๋์ค ์์ฑ
- ํด๋์ค ์์ฒด์ ์ํ ๋ณ์
- ๋ชจ๋ ์ธ์คํด์ค๊ฐ ๊ณต์ ํ๋ ๊ฐ
- ํด๋์ค๋ฅผ ์ค๊ณํ ๋ ์ ์ํ๋ฉฐ, ์ธ์คํด์ค๋ฅผ ์๋ก ๋ง๋ค์ด๋ ๊ฐ์ด ๋ณํ์ง ์์
class MyClass:
number = 100 # ํด๋์ค ์์ฑ
obj1 = MyClass()
obj2 = MyClass()
print(obj1.number) # ์ถ๋ ฅ: 100 (ํด๋์ค ์์ฑ ์ฐธ์กฐ)
print(obj2.number) # ์ถ๋ ฅ: 100 (ํด๋์ค ์์ฑ ์ฐธ์กฐ)
MyClass.number += 10 # ํด๋์ค ์์ฑ ๋ณ๊ฒฝ
print(obj1.number) # ์ถ๋ ฅ: 110 (๋ชจ๋ ์ธ์คํด์ค์์ ๊ณต์ ๋จ)
print(obj2.number) # ์ถ๋ ฅ: 110
2. ์ธ์คํด์ค ์์ฑ
- ์ธ์คํด์ค์ ์ํ ๋ณ์
- ๊ฐ ์ธ์คํด์ค๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ฅํ๋ ๊ฐ์ผ๋ก, ๋ค๋ฅธ ์ธ์คํด์ค์ ๊ณต์ ํ์ง ์์
- __init__ ๋ฉ์๋์์ ์ ์
class MyClass:
def __init__(self, value):
self.value = value # ์ธ์คํด์ค ์์ฑ
obj1 = MyClass(100)
obj2 = MyClass(200)
print(obj1.value) # ์ถ๋ ฅ: 100 (obj1์ ์์ฑ)
print(obj2.value) # ์ถ๋ ฅ: 200 (obj2์ ์์ฑ)
obj1.value += 10 # obj1์ ์์ฑ ๋ณ๊ฒฝ
print(obj1.value) # ์ถ๋ ฅ: 110
print(obj2.value) # ์ถ๋ ฅ: 200 (obj2๋ ์ํฅ์ ๋ฐ์ง ์์)
ํด๋์ค ์์
๊ธฐ์กด ํด๋์ค์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์๋ก์ด ํด๋์ค (์์ ํด๋์ค)๊ฐ ๋ฌผ๋ ค ๋ฐ๋ ๊ฒ์ ์๋ฏธํจ
- ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ผ ์ ์์
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def printinfo(self):
print(self.name, self.age)
def getinfo(self):
return self.name + ', ' + str(self.age)
class Student(Person):
def __init__(self, name, age, department, id):
super().__init__(name, age) # ๊ผญ ๋ชจ๋ ์ธ์๋ฅผ ์ ๋ฌ ๋ฐ์์ผํจ (1๊ฐ๋ง ๋ฐ๊ธฐ ์๋จ)
self.department = department
self.id = id
def printstuinfo(self):
name_age = super().getinfo() # ๋ถ๋ชจํด๋์ค์ getinfo() ๋ฉ์๋ ํธ์ถํ์ฌ ์ ๋ณด๋ฅผ ๋ฐํ ๋ฐ์
print(name_age)
print('%s๋์ ํ๊ณผ:%s, ํ๋ฒ:%s' % (self.name, self.department, self.id))
x = Student('ํ์ง์', 20, '์ํํธ์จ์ด๊ณตํ๊ณผ', '2014')
x.printinfo() # ํ์ง์ 20
x.printstuinfo() # ํ์ง์, 20 / ํ์ง์๋์ ํ๊ณผ:์ํํธ์จ์ด๊ณตํ๊ณผ, ํ๋ฒ:2014
- super().__init__(name)์ ํตํด ๋ถ๋ชจ ํด๋์ค์ init ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์์ฑ์ ์ด๊ธฐํ
- super() : ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์ฌ์ฉ์ค๋ฒ๋ผ์ด๋ฉ
- overriding : ์์ ํด๋์ค๊ฐ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๋ ๊ฒ
Decorator
๊ธฐ์กด ํจ์์ ์ฝ๋๋ฅผ ์ง์ ์์ ํ์ง ์๊ณ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐ
- ํจ์ ์์ ๋ฐ๋ณต๋๋ ๋ก์ง์ ๊ฐ๊ฒฐํ๊ฒ ๊ตฌํํ ์ ์์
- ๊ธฐ๋ฅ
- ํจ์ ์์ ํด์ค์ผ ๋๋ ๋ด์ฉ๋ค์ ๊ฐ๊ฒฐํ๊ฒ ๊ตฌํํด ๋ผ ์ ์์
- ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ ์ธก๋ฉด์์ ๊ต์ฅํ ์ข๋ค
- ํจ์์ ์คํ ์ ํ์ ํ์ํ๊ฒ ์์ผ๋ฉด `decorator` ๊ธฐ๋ฅ ํ์ฉํ๋ฉด ์ข๋ค
def my_decorator(func):
def wrapper():
print('ํจ์ ํธ์ถ ์ ')
func()
print('ํจ์ ํธ์ถ ํ')
return wrapper
def say_hello():
print('์๋
ํ์ธ์!')
say_hello(); print() # ์๋
ํ์ธ์
say_hello = my_decorator(say_hello); say_hello() # ํจ์ํธ์ถ์ , ์๋
ํ์ธ์, ํจ์ํธ์ถํ
# ----- decorator ์ ์ฉํ๋ฉด -----
@my_decorator
def say_hello():
print('์๋
ํ์ธ์!')
say_hello() # ํจ์ํธ์ถ์ , ์๋
ํ์ธ์, ํจ์ํธ์ถํ
* ์ข๋ ํ์ฉ ์์
def validate_positive_number(func):
def wrapper(arg):
if arg < 0: # ์ธ์๊ฐ 0๋ณด๋ค ์์ผ๋ฉด ์์ธ ๋ฐ์
raise ValueError("์ธ์๋ 0๋ณด๋ค ์ปค์ผ(positive) ํฉ๋๋ค.")
return func(arg) # ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ์๋ ํจ์ ์คํ
return wrapper
def validate_integer(func):
def wrapper(arg):
if not isinstance(arg, int) or arg < 0: # ์ ์๊ฐ ์๋๊ฑฐ๋ ์์์ผ ๊ฒฝ์ฐ ์์ธ ๋ฐ์
raise ValueError("์ธ์๋ ์์ฐ์(integer)์ฌ์ผ ํฉ๋๋ค.")
return func(arg) # ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ์๋ ํจ์ ์คํ
return wrapper
# ----- ์ค์ฒฉํด์ ์ฌ์ฉ ๊ฐ๋ฅ -----
@validate_positive_number
@validate_integer
def process_number(num):
print(f"์ซ์ ๊ฒ์ฆ: {num}")
process_number(1.1) # ์๋ฌ ๋ฐ์ : ๋๋ฒ์งธ (validate_integer) ๋ง์กฑ ์ํจ
'IT > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Streamlit] ํด๋ ๊ตฌ์กฐ ์ ๋ฆฌ (feat. LLM ๋ฒ๋ฅ ์๋น์ค ํ๋ก์ ํธ ๋ฆฌํฉํ ๋ง) (0) | 2025.04.05 |
---|