내장 함수명 기능
print() |
화면에 데이터 값을 출력함 |
input() |
키보드를 통해 데이터를 입력받음 |
range() |
정수의 범위를 설정함 |
list() |
리스트를 생성함 |
abs() |
숫자의 절대값을 구함 |
len() |
문자열, 리스트, 튜플, 딕셔너리 등의 길이를 구함 |
round() |
소수점 이하 반올림 값을 구함 |
int() |
문자열이나 실수형 숫자를 정수형 숫자로 변환함 |
float() |
문자열이나 정수형 숫자를 실수형 숫자로 변환함 |
def print_something(a):
print(a)
p = print_somethig #()없이 함수의 이름만을 변수에 저장합니다.
p(123) #변수의 이름 뒤에 ()를 붙여 함수처럼 호출하면 됩니다.
---------------------
def plus(a, b):
return a+b
def minus(a, b):
return a-b
flist = [plus, minus] #plus 함수와 minus 함수를 리스트의 요소로 집어넣는다.
flist[1](1, 2) #filst[1]은 flist의 1번째 인덱스 즉 minus를 뜻함
- 클로저
- 어떤 함수의 내부함수가 외부함수의 변수(프리 변수)를 참조 할 때, 외부함수가 종료된 후에도 내부함수가 외부함수의 변수를 참조 할 수 있도록 해 주는 함수
- 외부함수 바깥의 전역 변수에 내부함수가 할당 될 때 생성
- 외부에서 내부함수에 접근하여 실행될 때, 해당 클로저를 참조
- 어떤 함수의 내부함수이어야함
- 그 내부함수가 외부함수의 변수를 참조해야함
- 외부함수가 내부함수를 리턴해야함
- 프리변수(공인된 이름은 아님)
- 어떤 함수에서 사용 되지만, 그 함수 내부에서 선언 되지 않은 변수(즉, 외부함수에만 선언 된 변수)
- 람다 함수(익명함수)
- 함수를 한 줄로 간단하게 만들어줌(반드시 단일 표현식이어야함)
- lambda arg1, arg2 .... argN: arg를 사용한 표현식
- 함수 이름으로 치환
#일반식
def addFun(num1, num2):
result = num1 + num2
return result
print(addFun(10,20))
#람다식
addFun = lambda num1, num2 : num1 + num2
print(addFun(10,20))
#print((lamda num1, num2 : num1+num2)(10, 20))
- 매개변수
def color(name, color, amount) :
if(amount == 1):
print('%s님은 %s을 좋아하지 않습니다.' %(name, color))
elif(amount == 2):
print('%s님은 %s을 조금 좋아합니다.' %(name,color))
else :
print('%s님은 %s을 매우 좋아합니다.' %(name, color))
color('박지성', '빨강', 3)
color('손흥민', '노랑', 1)
color('차범근', '검정', 2)
#실행결과
박지성님은 빨강을 매우 좋아합니다.
손흥민님은 노랑을 좋아하지 않습니다.
차범근님은 검정을 조금 좋아합니다.
def average(*scores) :
sum = 0
for i in range(len(scores)) :
sum += scores[i]
avg = sum/len(scores)
print('%d과목의 평규: %.2f'%(len(scores), avg))
average(80,90,100)
average(75,80,45,33)
average(1,2,3,4)
#실행결과
3과목의 평규: 90.00
4과목의 평규: 58.25
4과목의 평규: 2.50
#값 호출
#서브 루틴 : func()함수
def func(x) :
x = 100
print('func() = x', x,', id=', id(x))
#메인 루틴
x = 10
print('메인:x =',x,', id=',id(x))
func(x)
print('메인:x =',x,', id=',id(x))
#서브루틴 func(x)의 x값과, 메인 루틴의 x값은 다른 주소값을 갖고 있는 다른 x이다.
#실행결과
메인:x = 10 , id= 1853529260560
func() : x 100 , id= 1853529263440
메인:x = 10 , id= 1853529260560
#레퍼런스에 의한 호출
#서브 루틴 : func()함수
def func(x) :
x[0] = 100
print('func() = x', x,', id=', id(x))
#메인 루틴
x = [1,2,3]
print('메인:x =',x,', id=',id(x))
func(x)
print('메인:x =',x,', id=',id(x))
#서브루틴을 통한 레퍼런스에 의한 호출은 메인 루틴에 영향을 준다.
#메인x의 주소값에 100이 저장됨
#실행결과
메인:x = [1, 2, 3] , id= 3041862133504
func() = x [100, 2, 3] , id= 3041862133504
메인:x = [100, 2, 3] , id= 3041862133504
def circle_area(r):
area = r * r * 3.14
return area
radius = int(input('원의 반지름을 입력하세요 :'))
result = circle_area(radius)
print('반지름은 %d, 원의 면적 : %.2f' %(radius, result))
#실행결과
원의 반지름을 입력하세요 :13
반지름은 13, 원의 면적 : 530.66
def sum(start, end): #시작과 끝의 수를 입력받는 함수
total = 0 #합계 초기화
for i in range(start, end+1): #반복문을 통해 시작수와 끝수를 반복해서 더해줌
total += i
print('%d ~ %d의 정수 합계 : %d' %(start,end,total))
sum(10, 100)
sum(100, 1000)
sum(1000, 10000)
s = int(input('시작 수를 입력하세요'))
e = int(input('끝 수를 입력하세요'))
b = int(input('합계를 구할 배수를 입력하세요'))
def besu(s, e, b): #시작 끝 배수를 입력받는 함수
sum = 0 #합계 초기화
for i in range(s, e+1): #시작값과 끝값 e+1을해야 100까지 계산
if i % b == 0 : #i값을 b로 나누어 0으로 떨어져야 b의 배수
sum += i #i값을 총합에 더함
return sum
result = besu(s,e,b) #총 결과값에 저장
print('%d~%d의 정수 중 %d의 배수의 합: %d'%(s,e,b,result))
데코레이터
- 어떤 함수 이름을 인자로 받아 꾸며 준 후, 다시 해당 함수 호출을 리턴하는 함수
- 데코레이트 할 함수의 정의부 위에 @데코레이터명 추가
- 함수 내부에 변화를 주지 않고 로직을 추가 하고 싶을 때 사용
- 코드 중복 최소화, 재사용성 향상
- 중첩 가능 - 함수와 가까운(안쪽) 데코레이터가 원, 가독성 및 디버깅 어려움
- 필수 항목 - *args와 **kwargs, 내부 함수, 함수이름 매개변수
def deco(func):
def deco_func(*args, **kwargs):
print("decorate") #데코 부분
return func(*args, **kwargs) #바깥함수의 입력인자로 받은 함수를 리턴
return deco_func #실제 데코레이터 함수 이름 리턴
@deco
def original_func():
print("original")
original_func()
#original_func() 번역 순서
# 1) original_func()
# 2) deco(original_func)() #실제 데코레이터 함수이름 리턴
# 3) deco_func() #사실은 deco_func의 레퍼런스, 실제 데코레이터 함수 호출
# 4) print("decorate")
# original_func()
# 5) print("decorate")
# print("original")