TIL 12 | More Complex Function Parameters & Nested Function
1. More Complex Function Parameters
사전에 정확히 필요한 parameter 수와 구조를 알 수 없는 경우, dictionary를 parameter로 받아서 사용 가능하다.
- 장점: 옵션만 간단히 설정할 수 있다
- 단점: 옵션을 dictionary로 받아야 하기때문에 옵션을 추가하지 않는 경우에도 비어있는 dictionary를 넘겨줘야 하고, 다른 타입의 값을 넘겨주는 오류 발생 가능성도 존재.
def buy_A_car(options):
print(f"다음 사양의 자동차를 구입하십니다:")
for option in options:
print(f"{option} : {options[option]}")
options = {"seat":"가죽", "blackbox":"최신"} # 옵션만 간단하게 설정
buy_A_car(options)
결과
1) Keyworded variable length of arguments
- keyword arguments(키워드 인수)인데 그 수가 유동적으로 변할 수 있는 인수
- parameter명 앞에
**
로 시작.
일반 keyword arguments와의 차이점
- argument 수를 0부터 N까지 유동적으로 넘겨줄 수 있음
- Keyword가 정해져있지 않기 때문에 원하는 keyword 사용 가능
- dictionary 형태로 지정됨
def buy_A_car(**kwargs):
print(f"다음 사양의 자동차를 구입하십니다:")
for option in kwargs:
print(f"{option} : {kwargs[option]}")
buy_A_car(seat="가죽", blackbox="최신", tint="yes") # 호출 시
2) Non-keyworded variable length of arguments(=variable arguments)
- 직전에서 언급했던 Keyworded variable length of arguments와 동일하지만 keyword를 사용하지 않고 순서대로 값을 전달하는 방식.
*
로 선언되며 tuple로 변환되어 함수에 전달됨.
3) Mixing args and kwargs
Keyworded variable arguments & Variable arguments 둘 다 사용하여 함수 정의.
둘 다 사용하면 어떠한 형태와 수의 argument도 허용가능한 함수가 되어 parameter에 있어 굉장히 유동적인 함수가 됨.
def do_something(*args, **kwargs):
4) 예제
- sum_of_numbers 함수 구현: argument로 주어지는 모든 수를 합한 값 리턴하기
def sum_of_numbers(*args):
sum = 0
if args == 0:
return 0
for arg in args:
sum += arg
return sum
- what_is_my_full_name 함수 구현: 주어진 parameter 중 first_name과 last_name 이라는 parameter 조합하여 full name 리턴하기
def what_is_my_full_name(**kwargs):
if "first_name" in kwargs and "last_name" in kwargs:
return f"""{kwargs["last_name"]} {kwargs["first_name"]}"""
elif "first_name" in kwargs and "last_name" not in kwargs:
return f"""{kwargs["first_name"]}"""
elif "first_name" not in kwargs and "last_name" in kwargs:
return f"""{kwargs["last_name"]}"""
else:
return "Nobody"
2. Nested function
함수도 함수 안에 중첩되어 선언할 수 있다!
def parent_function()" def child_function(): print("this is a child function") child_function() parent_function() # 결과: "this is a child function"
- 중첩함수를 사용하는 이유는?!
1) 가독성
반복되는 코드를 함수로 정의해서 효과적으로 코드를 관리할 수 있다.
def print_all_elements(list_of_things):
def print_each_element(things): # 중첩함수 선언
for thing in things:
print(thing)
if len(list_of_things) > 0:
print_each_element(list_of_things)
else:
print("There is nothing!")
2) closure
중첩 함수가 부모 함수의 변수나 정보를 가두어 사용하는 것.
부모함수의 변수를 외부로부터 직접적인 접근은 격리하면서도 중첩함수를 통해 부모함수의 변수를 사용한 연산은 가능하게 해준다.
def generate_power(base_number):
def nth_power(power):
return base_number ** power
return nth_power
calculate_power_of_two = generate_power(2)
calculate_power_of_two(7) # 결과: 128
Author And Source
이 문제에 관하여(TIL 12 | More Complex Function Parameters & Nested Function), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hjulee12/TIL-12-More-Complex-Function-Parameters-Nested-Function저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)