금요일이다아아아! 🐱🏍
사용자 정의 함수 안에 인자를 넣고 print 하면 함수 실행,
함수만 print하면 메모리 주소의 hash 값 출력
def my_sum(a, b):
result = a + b
return result
print(my_sum(10, 20), my_sum) # 30 <function my_sum at 0x000002314267E280>
인자의 개수에 상관없이 사용자 정의 함수를 사용하려면 (*args) 사용, 인자를 tuple로 받음
def my_sum(*args):
result = 0
for i in args:
result += i
return result
print(my_sum(1, 2, 3, 4, 5)) # 15
python의 함수는 여러 개의 값을 리턴할 수 있음
def my_sum(a, b):
result1 = a + b
result2 = a * b
return result1, result2
print(my_sum(1, 2)) # (3, 2)
default parameter는 반드시 매개변수 끝에 하나만 나와야 함
인자를 사용해도 되고 사용하지 않아도 됨
def my_sum(a, b, c = 100):
result = a + b + c
return result
print(my_sum(1, 2), my_sum(1, 2, 3)) # 103 6
immutable = call by value, mutable = call by reference
def my_sum(tmp_number, tmp_list):
tmp_number += 100
tmp_list.append(100)
data_x = 10 # call by value
data_list = [10] # call by reference
print(data_x, data_list) # 10 [10]
my_sum(data_x, data_list) # 함수호출
print(data_x, data_list) # 10 [10, 100]
사용자 정의 함수 내에서 global keyword 사용하면 외부 영역에 있는 변수를 사용할 수 있음
tmp = 100
def my_func(x):
# tmp = 100
global tmp # stack 안에서 tmp를 찾을 수 없기 때문에 사용
tmp += x
return tmp
print(my_func(10)) # 110
구조적(절차지향) 프로그래밍 : 설계→구현→테스트→배포, C
분석·설계가 쉬움→프로그램의 개발 속도가 빠름→비용 적게 듦
/ 코드의 결합도가 높아 유지·보수가 힘듦
객체지향(object oriented) 프로그래밍 : 현실세계의 해결해야 하는 문제를 그대로 프로그램으로 표현
구성요소 파악→구성요소들 간의 데이터 통신이 어떻게 되는지 파악·구현
Java, C++, C#
유지보수성이 상대적으로 좋음
/ 분석·설계가 어려움→프로그램 만들기 어려움
객체 모델링 : 현실세계의 개체(객체)를 프로그램(변수·함수)으로 표현
class는 객체 모델링을 하기 위한 수단
직접적인 수학적 연산이 수행되면 숫자 ex) 학점
아니면 문자열 처리 ex) 학번
사용자 정의 클래스(user define class)의 이름은 관용적으로 대문자로 시작
class Student(object):
def __init__(self, stu_name, stu_dept, stu_number, stu_grade):
self.student_name = stu_name
self.student_dept = stu_dept
self.student_number = stu_number
self.student_grade = stu_grade
# 특수 메서드를 사용자 정의 클래스에 추가
stu1 = Student('아이유', '철학과', '201101', 3.5)
stu2 = Student('김연아', '컴퓨터', '201102', 4.5)
stu3 = Student('신사임당', '영어영문', '201103', 1.5)
print(stu1.student_name, stu2.student_dept, stu3.student_number, stu1.student_grade)
# 아이유 컴퓨터 201103 3.5