[python] 파이썬 함수 사용하기 #3언패킹 리스트,키워드인수,디폴트 인자값

#언패킹 리스트로 여러가지 값을 한번에 넘기기

x = [10,20,30]
print(*x)
#출력
10 20 30

10,20,30의 값을 넣는 x라는 리스트 생성하고 (*)을 사용해서 리스트에 있는 전부를 출력

리스트나 튜플 앞에 *를 붙히면 언패킹이 되어서 print(10,20,30) 과 같은 동작을 합니다. ( 리스트의 포장을 푼다는 의미 )

 

#가변 인수 함수

def testmethod(*args):
    for arg in args:
        print(arg)

testmethod(10,20,30,40)
#출력
10
20
30
40

언패킹은 인수의 갯수가 정해지지 않은 가변 인수에 사용할 수 있습니다.

 

#키워드 인수

def personal_info(name,age,address):
    print('이름: ',name)
    print('나이: ',age)
    print('주소: ',address)
    print()
#기존방식
personal_info('홍길동','20','서울')
#키워드 인수
personal_info(age=30,address='부산',name='이순신')
#출력
이름:  홍길동
나이:  20 
주소:  서울 

이름:  이순신 
나이:  
30 주소:  부산

키워드 인수를 사용하는 이유는 코드 자체는 길어질 수 있지만 사용하지 않으면 무조건 이름,나이,주소 순서대로 입력을 받아야 하는데 키워드 인수를 사용하면 키값으로 매개변수가 들어가기 때문에 변수 입력 순서를 따르지 않아도 됩니다.

 

#디폴트 인자값(초기 인자값)

def info(name,age,address='대한민국'):
    print('이름: ',name)
    print('나이: ',age)
    print('주소: ',address)

info('홍길동',20)
#출력
이름: 홍길동
나이 : 20
주소: 대한민국

인자값에 기본값을 주게 되면 값을 비워두고 호출할 수 있게 됩니다. 기본값을 설정 해놔도 값을 넣으면 값이 전달이 됩니다

def info(name,age,address='대한민국'):
    print('이름: ',name)
    print('나이: ',age)
    print('주소: ',address)

info('홍길동',20,'서울')
#출력
이름: 홍길동
나이 : 20
주소: 서울

 

주의할 점은 초기값이 지정된 매개변수 뒤에는 초기값이 없는 매개변수가 올 수 없습니다.

#예시

def info(name,age=20,address):
    print('이름: ',name)
    print('나이: ',age)
    print('주소: ',address)

 

 

#연습문제1

여러가지의 점수값중에서 가장 높은 점수를 구하는 프로그램을 만들어 보겠습니다.
기존 방식을 사용하는 함수1, 언패킹을 사용하는 함수2

kor, eng, math, sci = 100,83,80,75

#기존
def max_score1(kor,eng,math,sci):
    return max(kor,eng,math,sci)

#언패킹
def max_score2(*args):
    return max(args)


max_score = max_score1(kor,eng,math,sci)
print('최고점수: ',max_score)


max_score = max_score2(kor,eng,math,sci)
print('최고점수: ',max_score)
#출력
최고점수 : 100
최고점수 : 100

 

#연습문제

위 문제에서 최고,총, 평균 값을 구하는 프로그램을 만들어 보기

kor, eng, math, sci = 100,83,80,75

def max_score(*args):
    return max(args)
    
def total_score(*args):
    total = sum(args)
    return total

max_score = max_score(kor,eng,math,sci)
total_score = total_score(kor,eng,math,sci)
avg_score = total_score / 4

print('최고: ',max_score)
print('총점: ',total_score)
print('평균: ',avg_score)
#출력
최고: 100
총점: 338
평균: 84.5

댓글

Designed by JB FACTORY