251002 TIL
2025. 10. 2. 18:04ㆍCourses/아이티윌 오라클 DBA 과정
Numpy 연산
# numpy 모듈 기반 배열 연산
ls1 = [82, 76, 91, 65]
# 문제) ls1 각 요소에 2씩 더하기
# -> [84, 78, 93, 67]
ls2 = []
for idx in range(4):
ls2.append(ls1[idx] + 2)
print(ls2) # [84, 78, 93, 67]
# 문제) 인덱스가 동일한 각 요소끼리 더해서 ls5에 저장
ls3 = [10, 15, 20, 25, 30]
ls4 = [2, 3, 4, 5, 6]
ls5 = [0, 0, 0, 0, 0]
i = 0
for idx in range(5):
ls5[idx] = ls3[idx] + ls4[idx]
print(ls5) # [12, 18, 24, 30, 36]
#################################################################
import numpy as np
grade = np.array([82, 76, 91, 65])
print(grade)
# new1 = ls1 + 2 -> 에러
new1 = grade + 2 # 각 요소에 2씩 더함
print(grade) # [84, 78, 93, 67]
new2 = grade - 5 # 각 요소에 5씩 뺌
print(new2) # [77 71 86 60]
arr1 = np.array([10, 15, 20, 25, 30])
arr2 = np.array([2, 3, 4, 5, 6])
arr3 = arr1 + arr2 # 인덱스가 동일한 요소끼리 더하기
print(arr3) # [12, 18, 24, 30, 36]
arr4 = arr2 - arr1
print(arr4) # [ -8 -12 -16 -20 -24]
# 집계함수
aver = np.array([82, 76, 91, 65])
print("총점 : %d" % np.sum(aver)) # 314
print("평균 : %d" % np.average(aver)) # 78
print("최대값 : %d" % np.max(aver)) # 91
print("최소값 : %d" % np.min(aver)) # 65
#################################################################
# numpy 모듈을 활용한 정형화된 배열 만들기
a = np.arange(15)
print(a) # [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
b = np.arange(100, 115)
print(b) # [100 101 102 103 104 105 106 107 108 109 110 111 112 113 114]
print(len(b)) # 15
# 모든 요소가 실수형
c = np.zeros(3)
print(c) # [0. 0. 0.]
d = np.zeros(4, dtype="int")
print(d) # [0 0 0 0]
e = np.ones(3)
print(e) # [1. 1. 1.]
f = np.ones(4, dtype="int")
print(f) # [1 1 1 1]
g = np.full(5, 7)
print(g) # [7 7 7 7 7]
h = np.full(4, 7, dtype="float")
print(h) # [7. 7. 7. 7.]
함수
# 참조 https://www.w3schools.com/python/python_functions.asp
# 1. Arguments와 Keyword Arguments
# -> Argument 전달값, 보내는 값
# -> Parameter 받는값
# -> 함수 선언시 파라미터의 수를 특정할 수 없을 경우 사용
# -> keyword arguments의 경우 아규먼트로 함수 호출 시 키워드를 작성하여 호출
# -> arguments는 튜플 타입
# -> keyword arguments는 딕셔너리 타입
## 1) Arguments, *args
def test1(fname, lname):
print(fname + " " + lname)
test1("손", "흥민") # 손 흥민
# test1("김") TypeError: test1() missing 1 required positional argument: 'lname'
def test2(*names):
print(names)
print(type(names)) # 튜플
print(len(names))
# 맨 마지막 요소값 출력
print(names[-1])
test2("개나리", "진달래", "무궁화", "라일락", "코리아")
# ('개나리', '진달래', '무궁화', '라일락', '코리아')
# <class 'tuple'>
# 5
# 코리아
## 2) Keyword Arguments, **Kwargs
def test3(**phones):
print(phones)
print(type(phones)) # 딕셔너리
print(phones["phone3"])
test3(phone1="123", phone2="456", phone3="789")
# {'phone1': '123', 'phone2': '456', 'phone3': '789'}
# <class 'dict'>
# 789
## 3) *args와 **kwargs
def hap(*args, **kwargs):
print(type(args), args)
print(type(kwargs), kwargs)
return sum(args) + sum(kwargs.values())
print(hap(1, 2, 3, 4, num1=5, num2=6))
# <class 'tuple'> (1, 2, 3, 4)
# <class 'dict'> {'num1': 5, 'num2': 6}
# 21
## 4) list 타입 데이터를 args로 호출하는 방법
def gop(n1, n2, n3):
return n1 * n2 * n3
ls = [2, 3, 4]
print(gop(ls[0], ls[1], ls[2])) # 24
print(gop(*ls)) # 24
# 주의사항 : list 요소의 갯수와 파라미터의 갯수가 일치해야 함
ls2 = [2, 3, 4, 5]
# gop(*ls2) TypeError: gop() takes 3 positional arguments but 4 were given
def hap2(*args):
return sum(args)
ls3 = [3, 4, 5, 6]
print(hap2(*ls3)) # 18
데코레이터
# 참조 https://www.w3schools.com/python/python_decorators.asp
# 2. Decorators
# -> 함수의 코드를 변경하지 않고도 함수에 추가 동작을 추가할 수 있다
# -> 다른 기능을 입력으로 받아 새로운 기능을 반환하는 기능
# -> 선언) @함수이름
## 1) 함수안에 함수가 선언되는 경우 (inner function)
## -> 함수를 지역영역에 선언
## -> 함수 안에 함수
def outer(a, b):
def inner(c, d):
return c + d
return inner(a, b)
print(outer(1, 2)) # 3
# inner(1, 2) NameError: name 'inner' is not defined.
## 외부에서 inner function 접근
def outer2():
def inner(c, d):
return c + d
return inner
print(outer2()(3, 4)) # 7
## 2) @decorator_name
def changecase(fn):
def myinner():
print("start...")
res = fn().upper()
print(res)
print("end...")
return myinner
@changecase
def myfunction():
return "Hello Python"
myfunction()
# start...
# HELLO PYTHON
# end...
## 예제) password가 일치하면 연산이 가능하고, 그렇지 않으면 로그인실패 출력하는 decorator 만들기
def checkPassword(fn):
def wrapper(*args, **kwargs):
pw = "itwill"
login = input("비밀번호 : ")
if login == pw:
return fn(*args, **kwargs)
return "로그인 실패"
return wrapper
@checkPassword
def hap(a, b):
return a + b
print(hap(3, 4))
클래스
# 참조
# https://www.w3schools.com/python/python_oop.asp
# https://www.w3schools.com/python/python_classes.asp
# 객체 지향 프로그램 (Object Oriented Progarm)
# 클래스(class, 사용자 정의 자료형)와 객체(Object)
# 클래스명의 첫글자는 대부분 대문자로 한다
"""
class 클래스명:
멤버변수
멤버함수()
"""
# 클래스 선언
class Member:
userid = "python"
email = "webmaster@itwill.com"
phone = "0269017010"
a = 3 # a는 변수
# Member() 생성자 함수(Constructor)
# -> 클래스명과 동일한 함수
mem1 = Member() # mem1 -> 객체(Object) 선언
# . 연산자를 이용해서 멤버에 접근
# 객체명.멤버
print(mem1.userid)
print(mem1.email)
print(mem1.phone)
mem2 = Member()
print(mem2.userid)
print(mem2.email)
print(mem2.phone)
# 2) 멤버함수를 포함하는 클래스 정의
# ->클래스내에 선언된 함수(멤버함수)들은
# ->반드시 첫번째 파라미터 self를 정의해야 한다
class Calc:
def plus(self, x, y):
return x + y
def minus(self, x, y):
return x - y
def all(self, x, y):
a = self.plus(x, y)
b = self.minus(x, y)
return a, b
calc = Calc()
print(calc.plus(2, 4)) # 6
print(calc.minus(2, 4)) # -2
print(calc.all(2, 4)) # (6, -2)
x = calc.all(6, 8)
print(x) # (14, -2)
print(x[0]) # 14
print(x[1]) # -2
i, j = calc.all(6, 8)
print(i) # 14
print(j) # -2
# 3) 멤버변수(field, column)와 멤버함수(method)를 모두 내장하는 클래스 정의
class User:
# 멤버변수의 유효범위는 클래스 내부에서는 모두 접근가능
username = ""
email = ""
def join(self, username, email): # 매개변수와 멤버변수는 이름이 동일해도 된다
self.username = username # slef.멤버변수 = 매개변수
self.email = email
def disp(self):
print(self.username)
print(self.email)
# 객체 선언
user1 = User()
user1.join("user1", "user1@itwill.co.kr")
user1.disp()
user2 = User()
user2.join("user2", "user2@itwill.co.kr")
user2.disp()
#######################################################################################
# 4) 성적 클래스
class Sungjuk:
# 멤버변수
uname = ""
kor = 0
eng = 0
mat = 0
aver = 0
# 멤버함수
def init(self, uname, kor, eng, mat): # 이름, 국, 영, 수 값을 전달받는 함수
self.uname = uname
self.kor = kor
self.eng = eng
self.mat = mat
self.aver = sum((kor, eng, mat)) / 3
def disp(self):
print(f"{self.uname} {self.kor} {self.eng} {self.mat} {self.aver:.2f}")
stu1 = Sungjuk()
stu1.init("손흥민", 90, 85, 90)
stu1.disp() # 손흥민 90 85 90 88.33
stu2 = Sungjuk()
stu2.init("김연아", 50, 40, 60)
stu2.disp() # 김연아 50 40 60 50.00
stu3 = Sungjuk()
stu3.init("박지성", 75, 85, 95)
stu3.disp() # 박지성 75 85 95 85.00
생성자와 소멸자
# 생성자와 소멸자
# 1. 생성자 함수 Constructor
# ->생성자 함수는 클래스를 이용해서 객체를 생성할 때 사용한다
# ->클래스명과 동일한 함수이름으로 호출한다
## 1) 매개변수가 없는 생성자 함수
class Member:
uname = None
email = None
# 생성자 함수. init 앞뒤로 언더라인 2개
# 객체 생성할 때 Member()라는 이름으로 호출된다
# 기본생성자 함수 default constructor
def __init__(self):
# pass 함수 안에 아무 내용도 없을 때
print("Member() 생성자 함수 호출됨")
self.uname = "손흥민"
self.email = "son@itwill.com"
def disp(self):
print(f"이름: {self.uname} / 이메일: {self.email}")
mem1 = Member() # Member() 생성자 함수 호출됨
mem1.disp() # 이름: 손흥민 / 이메일: son@itwill.com
mem2 = Member()
mem2.disp()
## 2) 매개변수가 있는 생성자 함수
class User:
uname = None
email = None
def __init__(self, uname, email):
print("매개변수가 있는 User() 생성자 함수 호출됨")
self.uname = uname
self.email = email
def disp(self):
print(f"이름: {self.uname} / 이메일: {self.email}")
user1 = User("김연아", "kim@itwill.com") # 매개변수가 있는 User() 생성자 함수 호출됨
user1.disp() # 이름: 김연아 / 이메일: kim@itwill.com
user2 = User("박지성", "park@itwill.com")
user2.disp()
# 2. 소멸자 Destructor
# -> 메모리에서 객체를 소멸할 때 자동으로 호출되는 함수
class Student:
uname = None
email = None
def __init__(self, uname, email):
print("매개변수가 있는 Student() 생성자 함수 호출됨")
self.uname = uname
self.email = email
def disp(self):
print(f"이름: {self.uname} / 이메일: {self.email}")
def __del__(self):
print("소멸자 함수 호출됨...")
stu1 = Student("라일락", "ra@itwill.com")
stu1.disp()
stu2 = Student("무궁화", "mu@itwill.com")
del stu2 # stu2 객체 강제 삭제
# stu2.disp() # NameError: name 'stu2' is not defined.'Courses > 아이티윌 오라클 DBA 과정' 카테고리의 다른 글
| 251013 TIL (0) | 2025.10.13 |
|---|---|
| 251010 TIL (0) | 2025.10.10 |
| 251001 TIL (0) | 2025.10.01 |
| 250930 TIL (0) | 2025.09.30 |
| 250929 TIL (0) | 2025.09.29 |