Python 함수 활용 기법: 리스트 전달과 가변 인자 처리

리스트를 함수에 전달하기

리스트는 함수에 전달할 수 있는 유용한 데이터 구조입니다. 이름 목록, 수치 데이터, 복잡한 객체(예: 딕셔너리)를 포함할 수 있습니다. 함수에 리스트를 전달하면 해당 내용을 직접 조작할 수 있습니다.

예를 들어 사용자 목록에 인사 메시지를 전달하는 함수를 만들어 보겠습니다:

def say_hello(names):
    for name in names:
        print(f"안녕하세요, {name.capitalize()}님!")

user_list = ['alice', 'bob', 'charlie']
say_hello(user_list)

이 코드는 사용자 이름 목록을 받아 각각에게 개인화된 인사말을 출력합니다. 함수 외부에서 정의된 리스트는 함수 내부에서 접근 가능하며, 반복문을 통해 각 요소를 처리합니다.

함수 내부에서 리스트 수정

함수에 전달된 리스트는 영구적으로 수정될 수 있습니다. 다음은 3D 프린팅 작업을 시뮬레이션하는 예제입니다:

def process_print_queue(pending, completed):
    while pending:
        current = pending.pop()
        print(f"출력 중: {current}")
        completed.append(current)

def display_printed_items(items):
    print("\n완료된 출력 목록:")
    for item in items:
        print(f"- {item}")

pending_prints = ['전화 케이스', '로봇 펜던트', '십이면체']
printed_items = []

process_print_queue(pending_prints, printed_items)
display_printed_items(printed_items)

이 코드는 미완료 작업 목록을 받아 처리하면서 완료 목록에 추가하는 방식으로 작동합니다. 두 개의 함수로 작업을 분할하여 코드의 가독성을 높였습니다.

가변 인자 처리

Python은 함수에 임의 개수의 인자를 처리할 수 있는 기능을 제공합니다. 별표(*)와 두 개의 별표(**)를 사용하여 튜플과 딕셔너리 형태로 인자를 받을 수 있습니다.

단일 형식의 가변 인자

def create_pizza(diameter, *ingredients):
    print(f"\n{diameter}인치 피자 재료 목록:")
    for item in ingredients:
        print(f"- {item}")

create_pizza(18, '페퍼로니')
create_pizza(14, '버섯', '피망', '치즈')

이 함수는 피자 크기와 임의 개수의 토핑 재료를 받습니다. 위치 인자(size)는 반드시 첫 번째에 위치해야 하며, 나머지 인자는 튜플 형태로 수집됩니다.

키워드 인자 처리

정확한 키워드 값을 모르는 경우, **를 사용하여 딕셔너리 형태로 인자를 수집할 수 있습니다:

def generate_profile(first, last, **user_data):
    profile = {
        'first_name': first,
        'last_name': last
    }
    profile.update(user_data)
    return profile

user_info = generate_profile('marie', 'curie',
                            residence='파리',
                            expertise='물리학')
print(user_info)

이 예제는 사용자의 기본 정보와 추가적인 데이터를 결합하여 프로필 딕셔너리를 생성합니다. **user_data는 임의 개수의 키워드 인자를 수집하여 딕셔너리로 처리합니다.

태그: Python 함수 리스트 처리 가변 인자 키워드 인자 튜플 언패킹

8월 18일 12:53에 게시됨