기능
Python에서 함수는 하나 이상의 입력(인수)을 받는 재사용 가능한 코드 블록입니다.
하나 이상의 결과 값을 반환하는 함수를 실행합니다.
함수를 사용하면 코드 재사용성과 유지 관리성이 향상되고 프로그램 구조와 모듈성이 향상됩니다.
에프(X) = 2X+3
Python 함수의 구조
def 함수 이름(매개변수):
…..
반환 반환 값
# 함수 정의
def sum(a,b):
result = a+b
return result
#함수 호출
print(sum(1,2))
print()
#입력값이 없어도 출력값만 있을수 있다
def say():
return 'Hi'
print(say())
print()
# 출력(return)이 없어도 사용 가능하다
def sum(a,b):
print("%d, %d의 합은 %d입니다"% (a,b,a+b))
#함수 호출
sum(1,2)
# print 는 그대로 출력하고 return 값이 없기때문에 none 을 추가로 출력
print(sum(1,2))

# append = 리턴 값이 없는 리스트에 추가
myList = (1,2,3)
print(myList.append(4)) # none
# pop = 리턴 값이 있는 리스트 삭제
myList=(1,2,3)
print(myList.pop()) #삭제한 값 3
#입력도 출력도 없는 함수
def say():
print('hi')
print(say()) #none

# 여러 개의 입력값 *args n개의 인자를 한번에 받을 수 있다
def sum_many(*args):
sum =0
for i in args:
sum = sum+i
return sum #입력받은 값 전부 +
print(sum_many(1,2,3,4)) #10
# **kwargs : 딕셔너리형태로 입력값 받음
def print_kwargs(**kwargs):
for k in kwargs.keys(): # 입력한 딕셔너리
if(k== "name"): # 딕셔너리 key중에 name이 있으면
return "당신의 이름은:"+kwargs(k); #받은 key의 value를 출력하겠다
print(print_kwargs(name="python"))

# #함수의 결과값은 언제나 하나다
def sum_and_mul(a,b):
return a+b, a*b, a-b #리턴값이 튜플형태로 묶여서 '하나'의 '값'으로 나온다
print(sum_and_mul(1,2))

# #결과값을 골라서 사용
def sum_and_mul(a,b):
return a+b, a*b, a-b
print(sum_and_mul(1,2)(1),sum_and_mul(1,2)(2))

#기본 값 설정 : 순서를 맞추거나 순서가 틀리면 입력값을 매개변수에 정확히 매칭시켜야한다
def say_myself(name, old, man=True): # true 는 기본값으로 들어간다
print("나의 이름은 %s 입니다."% name)
print("나이는 %d살 입니다."%old)
if man:
print("남자입니다")
else:
print("여자입니다.")
say_myself("송태섭",20)
print()
say_myself("이한나",21,False) #else 문 출력

#함수안의 변수의 효력범위 vartest() = 함수내의 변수를 지역변수화, 함수내에서만 정의한 값을 사용할수 있다
a=1
def vartest(a):
a=a+1
return a
print(a) #1 함수가 지역변수여서 적용이 안된 모습
a = vartest(a) # return 값을 a에 재 할당하면 함수내에서 정의한 값을 사용가능하다
print(a) #2
print(vartest(a))#2가 다시 vartest함수에 들어가면서 결과값 3
print()
#global = 전역변수로 사용
a = 1
def vartest():
global a #함수내의 결과를 외부에 영향끼친다
a= a+1
vartest()
print(a) #2

#람다 식 : 축약하여 함수 이름을 정할 필요가 없다.
def add(a,b):
return a+b
#위 코드를 아래 람다식으로 대체
add = lambda a, b: a+b
print(add(1,2))
myList = (lambda a, b: a+b, lambda a, b: a*b)#람다식 정의
print(myList(0)(1,2),myList(1)(3,4))#람다식의 인덱스번호로 호출 가능
