*arg : variable number of arguments
* = unpacking operator
*은 말 그대로 언팩을 해주는, 그러니까 주어진 리스트나 튜플 등을 풀어헤쳐주는 애다.
*arg가 이름이지만 arg대신에 어떤 변수이름을 써도 상관없다. 언팩킹을 하기 위해 * 만 앞에 붙여주면 된다.
*arg는 함수에 가변인자를 넣을 때 사용한다. 이게 무슨 말이냐?
함수의 인자를 몇 개 받을지 정해지지 않은 경우에 사용한다. 상황에 따라서 들어갈 인자의 수가 다를 때, 인자의 수가 확실하지 않을 때 등을 생각하면 된다. parameter(매개변수)가 *arg면 들어가는 인자 수가 몇이든지 상관없이 함수를 쓸 수 있다.
*arg를 사용하는 간단한 함수를 예시로 만들어보자:
def my_function(*args):
print(args)
그리고 이 함수를 무작위 인자를 사용해서 호출해보자:
my_function('Arg1', 245, False)
output:
('Arg1', 245, False)
인자의 종류나 개수에 상관없이 전부 다 인자로 입력된다. 그렇기에 리스트[]나 사전{} 튜플()등으로 묶어줄 필요가 전혀 없다. 그냥 쓰고 싶은 인자를 , 로 이어 주기만 하면 된다.
*arg에 for loop(for 반복문)을 사용할 수도 있다.
def shout_strings(*args):
for argument in args:
print(argument.upper())
shout_strings('Working on', 'learning', 'argument unpacking!')
output:
WORKING ON
LEARNING
ARGUMENT UNPACKING!
for loop 만 *arg를 사용할 수 있느냐? 당연히 그건 아니다.
for loop외에도 다른 iterator 또한 *arg를 사용해서 각 element(객체)를 꺼내 쓸 수 있다.
물론 함수에 여러 변수를 사용하면서 그중 한 변수에 *arg를 사용할 수도 있다.
def truncate_sentences(length, *sentences):
for sentence in sentences:
print(sentence[:length])
truncate_sentences(8, "What's going on here", "Looks like we've been cut off")
output:
What's g
Looks li
연습문제
tables = {
1: {
'name': 'Jiho',
'vip_status': False,
'order': 'Orange Juice, Apple Juice'
},
2: {},
3: {},
4: {},
5: {},
6: {},
7: {},
}
def assign_table(table_number, name, vip_status=False):
tables[table_number]['name'] = name
tables[table_number]['vip_status'] = vip_status
#'order'는 매개변수에 없기 때문에 'order'변수를 새로 만들어주고 비워둔다
tables[table_number]['order'] = ''
def assign_and_print_order(table_number, *order_items):
tables[table_number]['order'] = order_items
for item in order_items:
print(item)
assign_table(2, 'Arwa', True)
#위치 지정 매개 변수인 table_number를 입력한 후, order item을 전부 써주면 된다. 이때 묶어줄 필요 없음
assign_and_print_order(2, 'Steak', 'Seabass', 'Wine Bottle')
print(tables)
'개발일기 > PYTHON [codecademy]' 카테고리의 다른 글
*args와 **kwargs (1) (Function Arguments) [Intermediate] (0) | 2022.08.14 |
---|---|
**kwargs (Function Arguments) (0) | 2022.08.14 |
Recap (Function Arguments) (0) | 2022.08.14 |
[codecademy] 파이선 초보 단계 끝! (0) | 2022.08.13 |
[Beginner] Code Challenge: Classes (0) | 2022.08.13 |
댓글