한 걸음씩 기록하며

#.6 Function & Lambda 본문

Python

#.6 Function & Lambda

Haksae 2021. 12. 20. 16:10

1. Function definition

#함수 정의
def 함수명(parameter) :
	code
	return #없을 수도 있음

#함수 호출
함수명(parameter)
  • parameter == 매개변수
  • return을 통해 결과값을 전달
  • return 값이 없으면, None을 반환
  • 호출은 func(val1, val2)로 한다
  • return은 모든 종류의 객체를 반환할 수 있다. 단, 오직 한 개의 객체만 반환된다.
  • 단 하나의 객체만 반환되지만, 값은 여러개 반환될 수 있고 이럴 때에는 하나의 tuple로 묶여서 반환된다.

2. Parameter

1) positional argument

def city(city1, city2) :
	print("여행가고 싶은 도시는 {city1}와 {city2} 입니다.")
   
city("파리","뉴욕")
  • 함수는 기본적으로 인수를 위치로 판단
  • 기본값(Default Value):
    • 함수가 호출될 때, 인자를 지정하지 않아도 기본 값을 설정할 수 있다.
    • 기본 값이 있는 ‘’매개변수’’ 뒤에 기본 값이 없는 ‘’매개변수’’를 사용 할 수는 없다.

2) keyword argument

가능한 코드 예시
city(city2="뉴욕', city1="파리)
city("파리", city2 = "뉴욕")

불가능한 코드 예시
city(city=2"뉴욕", "파리)
  • 직접적으로 변수의 이름으로 특정 parameter를 전달할 수 있다.
  • 기존 파라미터 방식과 혼용이 가능하지만, 순서가 바뀌면 안된다.

3) default parameter

가능한 코드 예시
def city(city1, city2="뉴욕")
	print("여행가고 싶은 도시는 {city1}와 {city2} 입니다.")
   
city("파리")

불가능한 코드 예시
def city(city1 = 파리, city2)
  • 함수의 parameter에 디폴트 값을 정해줄 수 있다. 
  • default value parameter는 반드시 뒤에 선언되야한다. (keyword argument와 같은 이유)

 

4) *args

- argument의 줄임말. *이 한개 쓰면된다. 

- 함수 호출 시 여러개의 인자를 받고 싶을 때 파라미터에 쓴다. 여러개의 인자로 함수를 호출하면 함수 내부에서는 이를 튜플로 인식한다.

def hak_args(*args):
	print(f'arguments: {args}')

hak_args(1,2,3)

# result
arguments: (1,2,3)
  • (Non-keyworded) variable (length of) arguments
  • keyword를 사용하지 않고 순서대로 값을 전달하는 방식.
  • 키워드를 사용하지 않고 순서대로 argument를 받는다.
  • 받은 값은 함수에서 tuple로 pass된다.

5) **kwargs

- keyword argument의 줄임말. *을 두개 쓰면된다.

- 함수에서 인자를 딕셔너리 형태로 받고 싶을 때 파라미터에 쓴다.

def favorite_car(**kwargs):
	print(f"갖고싶은 차 : ")

	for car_list in kwargs :
            print(f"{car_list} : {kwargs[car_list]}")
        
favorite_car(쉐보레="크루즈", 현대="펠리세이드", 기아="모닝")
  • keyworded variable length of arguments
  • 수가 정해져 있지 않고 유동적으로 변할 수 있는 keyword arguments. 파라미터에 들어가면 딕셔너리 형태의 argument를 받는다.
    • argument 수를 0부터 N까지 유동적으로 넘겨줄 수 있다.
    • keyword가 미리 정해져 있기 않아 원하는 keyword를 유동적으로 사용할 수 있다.
    • keyworded variable length of arguments 는 dict 형태로 지정된다.

6) dictionary

def favorite_car(models):
	print(f"갖고싶은 차")

	for car_list in models :
    		print(f"{car_list} : {models[car_list]}")

models = {"쉐보레":"크루즈", "현대":"펠리세이드", "기아":"모닝"}

favorite_car(models)
  • **dict 를 통해 함수에 딕셔너리를 인자로 넘길 수 있다
  • func(**dict)

 

※ 순서가 바뀌면 안되는 이유

non default argument는 인자를 필수적으로 받아야 하는 반면, default argument는 생략되어도 디폴트 값이 있어 인자가 필수적이지가 않다. 때문에 상황에 따라 interpreter가 어떤 parameter에 어떤 argument을 매칭해야 하는지 혼란을 겪게 된다.

※ parameter를 정의하는 순서

Error를 방지하기 위해 parameter를 정의하는 순서를 지켜서 나열해야 한다.

  1. positional parameter or non-default parameter i.e (a,b,c)
  2. keyword parameter or default parameter i.e (a="b",r="j")
  3. keyword-only parameter i.e (*args)
  4. var-keyword parameter i.e (**kwargs)

3. Lambda

  • 람다 : 메모리 절약, 가독성 향상, 코드 간결
  • 함수는 객체 생성 → 리소서(메모리) 할당
  • 람다는 즉시 실행 (Heap 초기회) → 메모리 초기화
#함수 사용
def mul(num : int) -> int :
    return num * 10
print(mul(10))

#람다 사용
mul_lam = lambda num : num * 10
print(mul_lam(10))

'Python' 카테고리의 다른 글

#.8 Data Structure Method  (0) 2021.12.21
#.7 Data Structure : list, tuple, set, dict  (0) 2021.12.20
#.5 Control of Flow  (0) 2021.12.20
#.4 연산자  (0) 2021.12.20
#.3 String Formatting  (0) 2021.12.20
Comments