간서치 2023. 2. 3. 00:15
728x90

드디어 무시무시한 함수로 들어가네요!

Code의 편리한 재사용을 위해서 사용하는 것이 함수입니다.

인자값만 바꾸면 그때 그때 재사용을 할 수 있지요!
핵심을 잘 기억하세요!

# 함수식 및 람다(lambda)

# 함수 정의 방법
# def 함수명(parameter):
# code

# 함수 호출
# 함수명

# EX-1 return 값 없음
def hello(test):
  print('Hello',test)
hello('Python')
hello(7777)

# EX-2 return 값 있음
def hello_return(world):
    val = 'Hello ' + str(world)
    return val
  
str1 = hello_return('Python!!!!!!!!')
print(str1)

# EX-3 다중 return
def func_mul(x):
  y1 = x * 100
  y2 = x * 200
  y3 = x * 300
  return y1, y2, y3

val1, val2, val3 = func_mul(100)
print(val1, val2, val3)


# EX-4 
# args(가변형의 매개변수 사용가능, 튜플), *kwagr(딕셔너리 형태)

def args_func(*args):
  print(args)

args_func('Kim')
args_func('Kim', 'Park')
args_func('Kim', 'Park', 'Lee')


def args_func1(*args):
  for t in args:
    print(t)

args_func1('Kim')
args_func1('Kim', 'Park')
args_func1('Kim', 'Park', 'Lee')

# index 표시
def args_func(*args):
  for i,v in enumerate(args):
    print(i, v)

args_func('Kim')
args_func('Kim', 'Park')
args_func('Kim', 'Park', 'Lee')

# kwargs
def kwargs_func(**kwargs):
  print(kwargs)
kwargs_func(name1='Kim')
kwargs_func(name1='Kim', name2='Park')
kwargs_func(name1='Kim', name2='Park', name3='Lee')

# kwagrs-1
def kwargs1_func(**kwargs):
  for k,v in kwargs.items():
    print(k, v)

kwargs1_func(name1='Kim')
kwargs1_func(name1='Kim', name2='Park')
kwargs1_func(name1='Kim', name2='Park', name3='Lee')

# 전체 혼합
def exmaple_mul(arg1, arg2, *args, **kwargs):
  print(arg1, arg2, args, kwargs)

exmaple_mul(10, 20)
exmaple_mul(10, 20, 'park', 'kim', age1=24, age2=25)

# 중첩 함수 (함수내 함수)

def nested_func(num):
  def func_in_func(num):
    print('>>>',num)
  print('in func')
  func_in_func(num + 10000)

nested_func(10000)

# 예제 - 6 
def func_mul(x):
  y1 = x * 100
  y2 = x * 200
  y3 = x * 300
  return y1, y2, y3

val1, val2, val3 = func_mul(100)
print(val1, val2, val3)

def func1_mul(z : int) -> list:
  y11 = z * 100
  y12 = z * 200
  y13 = z * 300
  return [y11, y12, y13]

print(func1_mul(5))

# 람다식
# 람다식 : 메모리 절약, 가독성 향상, 코드 간결
# 함수는 객체 생성 -> 리소스(메모리 ) 할당
# 람다는 즉시 실행(heap 초기화) -> 메모리 초기화

# 일반적 함수 -> 변수 할당
def mul_1(num : int) -> int:
  return num * 10

var_func = mul_1
print(var_func)
print(type(var_func))


lambda_mul_2 = lambda num : num * 10

print('>>>', lambda_mul_2(10))

### 함수내 함수(람다식 사용 가능)
def func_final(x, y, func):
  print(x * y * func(10))

func_final(10, 10, lambda_mul_2)

# 1000이라는 값을 곱하려면 넣으려면
print(func_final(10, 10, lambda x :x *1000))

728x90