a, b = 2,3
c = a+b
print("내장 함수 str.format()과 print()를 이용한 c의결 과 출력 : {}.format(c))
명령문1
명령문2
return문
인터프린터 언어로 함수의 위치가 중요. 위에서부터 하나씩.
def calc_sum(x,y): # 매개변수에 인자값 전달
return x +y # calc_sum() 함수를 호출한 위치에 반환 값이 전달됨
a, b = 2,3
c = calc_sum(a,b) # 반환값 5가 c에 저장
d = calc_sum(a,c) # 반환값 7이 변수 d에 저장
print("사용자 정의 함수 calc_sum() 호출을 이용한 c의 결과 : {0}".format(c))
print("사용자 정의 함수 calc_sum() 호출을 이용한 d의 결과 : {0}".format(d))
calc_sum() : 두 개의 값을 전달 받아 합을 구하는 사용자 정의 함수.
def func_parameters_return(x,y,z):
print("매개변수로 전달된 값은 {}, {}, {} 입니다.".format(x,y,z))
print("매개변수와 반환값이 있는 함수입니다.")
return "Hello, Python"
# func_parameters_return() 함수를 호출한 위치에 반환 값으로 전달
ret_val = func_parameters_return(1,2,3)
print("func_parameters_return() 함수가 반환한 값: {}".format(ret_val))
# 매개변수로 전달된 값은 1,2,3 입니다
# 매개변수와 반환값이 있는 함수입니다.
# func_parameters_return() 함수가 반환한 값: Hello, Python!
def func_noparameters_return(): #매개 변수가 없어 괄호만 입력
print("매개변수가 없는 함수입니다") #문자열 출력
return "Hello, Python"
#func_noparameters_return() 함수를 호출한 위치에 반환 값으로 전달
ret_val = func_noparameters_return()
print("func_noparameters_return() 함수가 반환한 값 : {}".format(ret_val))
[Result]
매개변수가 없는 함수입니다.
func_noparameters_return() 함수가 반환한 값 : Hello, Python!
def func_noparmaeters_noreturn(x,y,z):
print("매개변수로 전달된 값은 {} {] {} 입니다". format(x,y,z)
print("반환값이 없는 함수입니다")
func_noparameters_noreturn(1,2,3)
Result]
매개변수로 전달된 값은 1 2 3 입니다.
반환값이 없는 함수입니다
def func_noparameters_noreturn():
print("매개변수와 반환값이 없는 함수입니다.")
func_noparameters_noreturn()
[Result]
매개변수와 반환값이 없는 함수입니다.
매개변수의 개수를 가변적으로 사용할 수 있또록 언팩 연산자(*) 제공
매개변수에 적용 시 인자를 튜플 형식으로 처리
가변형 매개변수를 가장 마지막 매개변수로 지정해야 부작용 없이 사용 가능
def calc_sum(*params): # 매개변수에 인자 값들이 튜플 형식으로 전달
total = 0
for val in params:
total += val
return total
ret_val = calc_sum(1,2) # 1,2가 인자로 전달되아 for문이 두 번 반복
print('cacl_sum(1,2) 함수가 반환한 값: {}".format(ret_val))
# cacl_sum(1,2) 함수가 반환한 값 : 3
ret_val = calc_sum(1,2,3)
print('cacl_sum(1,2,3) 함수가 반환한 값: {}".format(ret_val))
# cacl_sum(1,2,3) 함수가 반환한 값 : 6
ret_val = calc_sum(1,2,3,4)
print('cacl_sum(1,2,3,4) 함수가 반환한 값: {}".format(ret_val))
# # cacl_sum(1,2) 함수가 반환한 값 : 10
def calc_sum(precision, *params):
if precision ==0:
total = 0
elif 0 < precision <1:
total = 0.0
for val in params:
total +=val
return total
ret_val calc_sum(0,1,2)
print("calc_sum(0,1,2) 함수가 반환한 값:{}".format(ret_val))
# calc_sum(0,1,2) 함수가 반환한 값:3
ret_val calc_sum(0.1,1,2)
print("calc_sum(0.1,1,2) 함수가 반환한 값:{}".format(ret_val))
# calc_sum(0,1,2) 함수가 반환한 값:3.0
- 매개변수의 개수를 가변적으로 사용할 수 있도록 함
- 키워드 인자들을 전달해 매개변수를 딕셔너리 형식으로 처리함
- 키1 = 값1, 키2=값2
def use_keyword_arg_unpacking(**params):
for k in params.keys():
print("{}: {}".format(k, params[k]))"
print("use_keyword_arg_unpacking()의 호출")
use_keyword_arg_unpacking(a=1,b=2,c=3)
[Result]
use_keyword_arg_unpacking()의 호출
a:1
b:2
c:3
def calc(x,y,operator="+"): #operator에 전달할 인자를 생략하면 "+"가 기본 인자로 사용됨
if operator == "+"
return x+y
else:
return x-y
ret_val = calc(10,5, "+")
print(re_val)
# 15
- 전역 스코프 : 어디서나 접근 가능한 전역 변수
- 함수 스코프 : 함수 내에서만 접근 가능한 지역 변수
- 함수 스코프 내에서 가장 먼저 변수를 찾고 함수 스코프 내에 변수가 없을 경우 전역 스코프에서 변수를 찾음
- 지역변수와 전역변수 이름이 같을경우! 전역변수가 가려져 접근 못할 수 있음
def test_scope(a):
result = a +1
print("\n\ttest_scope()안에서의 a의 값 : {}".format(a))
print("\ttest_scope() 안에서의 result의 값 : {}\n" .format(result))
return result
x = 5
print("test_scope() 호출 전 x의 값: {}".format(x)
ret_val = test_scope(x) # 전역변수 x의 값: 매개변수 a의 인자로 전달, 지역변수 result에 6저장
print("test_scope() 함수가 반환한 값: {}".format(ret_val))
print("test_scope() 호출 후 x의 값: {}".format(x))
함수내에서 global 변수에 접근하기
def change_global_var():
global x
x+=1
x=5
change_global_Var() #변수 x의 값 5가 전역변수 x의 값으로 변경
prnit("전역변수 x의 값: {}".format(x))
[Reuslt]
전역 변수 x의 값 : 6
- 함수내에 중첩함수를 선언해 사용 가능
- 중첩함수를 포함하는 함수 내에서만 호출이 가능함
- 중첩함수를 포함하는 함수의 스코프에도 접근이 가능함
- 함수 내에서 직접 선언해 호출할 수도 있고, 함수의 매개변수로 함수 인자를 전달 받아 함수 내에서 호출해서 사용 가능
def calc(operator_fn,x,y):
return operator_fn(x,y)
def plus(op1, op2):
return op1+op2
def minus(op1, op2):
return op1-op2
ret_val = calc(plus, 10, 5)
print("calc(plus, 10, 5)의 결과 값: {}".format(ret_val))
# calc(plus, 10, 5)의 결과 값: 15
ret_val = calc(minus,10,5)
print("calc(minus, 10, 5)의 결과 값: {}".format(ret_val))
# calc(minus, 10, 5)의 결과 값: 5
- Lambda 매개변수 :반환값
- 변수에 저장해 재사용이 가능한 함수처럼 사용함
- 기존의 함수처럼 매개변수의 인자로 전달함
- 함수의 매개변수에 직접 인자로 전달함
def calc(operator_fn,x,y):
return operator_fn(x,y)
ret_val = calc(lambda a, b: a+b, 10, 5)
print("calc(lambda a, b : a+b, 10, 5)의 결과 값: {}".format(ret_val))
ret_val = calc(lambda a, b: a-b, 10, 5)
print("calc(lambda a, b : a-b, 10, 5)의 결과 값: {}".format(ret_val))
- 중첩함수에서 중첩함수를 포함하는 함수의 scope에 접근 가능
- 중첩함수 자체를 반환값으로 사용한다면?
정보 은닉 구현 가능
전역변수의 남용 방지
메서드가 하나밖에 없는 객체를 만드는 것보다 우아한 구현 가능
def outer_func():
id=0 # 지역변수
def inner_func():
nonlocal id # 변수 id가 중첩함수인 inner_func 함수의 지역변수가 아님
# 변수 id 접근 시 outer_func 함수 스코프에서 찾게 만듬
id += 1
return id
return inner_func
make_id = outer_func()