- 크게 2가지 종류가 있음
def my_sum(a, b): result = a + b return result #만든 함수를 call(호출) aa = my_sum(10, 20) # 여기서 10, 20은 actual parameter(실인자) print(aa) # Python은 함수도 객체! print(type(my_sum)) # <class 'function'> print(my_sum)) # <fucntion my_sum at 0x0000020336EBB280> => my_sum의 객체가 가리키는 주소값 print(my_sum(100, 200) # ()의 의미가 변수가 가리키는 함수 객체의 코드를 실행
- 결과
30
<class 'function'>
<fucntion my_sum at 0x0000020336EBB280>
300
이 출력됨
def my_sum(*args): result = 0 for tmp in args: result += tmp return result print(my_sum(10, 20, 30, 40, 50)) # 150 출력
def my_sum(a, b): result1 = a + b result1 = a * b return result1, result2 aa, bb = my_sum(10, 20) print(aa, bb) # 30 200
def my_sum(a, b, c = 100): return a + b + c print(my_sum(1,2)) # 103 print(my_sum(1,2,3)) # 6
def my_sum(tmp_number, tmp_list): tmp_number += 100 tmp_list.append(100) data_x = 10 data_list = [10] print(data_x, data_list) #10 [10] my_sum(data_x, data_list) # 함수호출 print(data_x, data_list) # 10 [10, 100]
tmp = 100 # memory 영역에 존재 def my_func(x): tmp = tmp + x # stack안에서 실행 return tmp # tmp를 찾을 수 없음 tmp값이 stack안에 없기 때문에 누적할 수 없음! print(my_func(10)) # Error 발생
tmp = 100 def my_func(x): global tmp tmp = tmp + x return tmp print(my_func(10)) # 110
- global()함수는 메모리 영역에서 함수를 찾는다는 의미 즉 스택을 넘어 메모리 영역에 있는 다른변수를 참조하기 위한 함수
- 이렇게 global keyword를 사용하면 외부 영역에 있는 변수를 사용할 수 있다!
- 편한 방법! 하지만 유지보수 측면에서 좋지 않기 때문에 이런 방법은 지양하는 편!
student_name = '아이유' student_dept = '철학과' student_number = '20221021' # 직접적인 수학적 연산이 가능하면 숫자 # 그렇지 않으면 문자 student_grade = 3.5
# 3명의 학생 정보를 프로그램적으로 저장 # 노동집약적 표현 student1_name = '아이유' student1_dept = '철학과' student1_number = '20220121' student1_grade = 3.5 student2_name = '김연아' student2_dept = '컴퓨터' student2_number = '20220122' student2_grade = 4.5 student3_name = '신사임당' student3_dept = '영어영문' student3_number = '20220123' student3_grade = 1.5
# 3명의 학생 정보를 프로그램적으로 저장 # 위의 표현보다는 나은 표현이지만 각 인데스 값이 같은 경우 # 1사람의 정보라는 데이터 코드에 명시되지 않음! student_name = ['아이유', '김연아', '신사임당'] student_dept = ['철학과', '컴퓨터', '영어영문'] student_number = ['20220121', '20220122'. '20220123'] student_grade = [3.5, 4.5, 1.5]
- 사용자 정의함수!
# user defin class의 이름은 관용적으로 대문자로 시작! class Student(object): # 특별한 함수를 하나 정의 할 것임! 이름이 정해져 있다! def__init__(self, stu_name, sut_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('아이유','철학과','20220121','3.5') stu2 = Student('김연아','컴퓨터','20220122','4.5') stu3 = Student('신사임당','영어영문','20220123','1.5') # class 안에는 반드시 함수 ef__init__이 있어야 한다! # __init__은 코드에서 직접 호출하지 않음! __init__뒤의 인자를 호출하면 # 자동으로 __init__이 호출됨!