본문 바로가기
Coding/TIL & 배운것들

24-11-08 베이직반에서 배운것들

by 코딩짜는 머글 2024. 11. 10.

*args, *kwargs 란?

함수의 인자(=파라미터=arguments)를 다루는 유용한 방법이다.

 

▼ args (Posistional Arguments)

args는 함수에서 위치 인자(positional arguments)를 받을 때 사용된다. args는 함수에 전달된 위치 인자들을 튜플로 묶어서 받아온다. 즉, 함수의 인자 개수를 고정하지 않고 여러 개를 받을 수 있게 해준다.

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

# 함수 호출
example_function(1, 2, 3, 4, 5)
# 출력
1
2
3
4
5

 

 위 코드에서 example_function은 *args를 사용하여 인자들을 받는다. 함수가 호출될 때 전달된 값들이 args라는 튜플로 묶여, for 루프를 통해 하나씩 출력된다. 

 

args 사용법 

  • args는 함수 정의에서 하나의 변수로 사용되며, 이 변수는 튜플 형태로 전달된 모든 위치 인자들을 포함한다.
  • 함수 호출 시 전달되는 위치 인자는 개수에 관계없이 처리할 수 있다.

 

▼ *kwargs (Keyword Arguments)

*kwargs는 함수에서 키워드 인자(keyword arguments)를 받을 때 사용된다. 함수에 전달된 이름이 있는 인자들을 딕셔너리 형태로 받아온다. 키는 인자의 이름, 값은 그에 해당하는 값이 된다.

def example_function(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

# 함수 호출
example_function(name="John", age=30, city="New York")
# 출력
name: John
age: 30
city: New York

 

위 코드에서 example_function은 **kwargs를 사용하여 키워드 인자들을 받는다. 함수 호출 시 전달된 키워드 인자들은 kwargs라는 딕셔너리로 묶여, for루프를 통해 키와 값을 출력한다.

 

*kwargs 사용법

  • *kwargs는 함수 정의에서 하나의 변수로 사용되며, 이 변수는 딕셔너리 형태로 전달된 모든 키워드 인자들을 포함한다.
  • 함수 호출 시 키워드 인자는 이름과 값을 함꼐 전달해야 하며, 개수에 관계없이 처리할 수 있다.

 

▼ args 와 *kwargs 의 조합

args와 *kwargs를 함께 사용할 수 있다. 이 경우, args는 위치 인자 들을 받고, *kwargs는 키워드 인자들을 받는다. 이때 args는 항상 *kwargs보다 먼저 와야 한다.

def example_function(arg1, *args, kwarg1=None, **kwargs):
    print(f"arg1: {arg1}")
    print(f"args: {args}")
    print(f"kwarg1: {kwarg1}")
    print(f"kwargs: {kwargs}")

# 함수 호출
example_function(10, 20, 30, 40, kwarg1="value", name="Alice", age=25)
# 출력
arg1: 10
args: (20, 30, 40)
kwarg1: value
kwargs: {'name': 'Alice', 'age': 25}

 

위 예시에서:

  • args1은 고정된 첫 번째 인자로 받는다.
  • args는 위치 인자들 (20, 30, 40)을 튜플로 받는다.
  • kwarg1은 기본값 None으로, 명시적으로 kwarg1='value'를 전달하여 사용된다.
  • *kwargs는 나머지 키워드 인자들인 {'name': 'Alice', 'age': 25}을 딕셔너리로 받는다.

 

▼ 함수의 인자 순서

1. 고정된 위치 인자 (필수 인자)

2. args (위치 인자들)

3. 기본값을 가진 키워드 인자

4. *kwargs (키워드 인자들)

def example_function(arg1, *args, kwarg1="default", **kwargs):
    print(f"arg1: {arg1}")
    print(f"args: {args}")
    print(f"kwarg1: {kwarg1}")
    print(f"kwargs: {kwargs}")

# 함수 호출
example_function(10, 20, 30, kwarg1="custom", name="John", age=22)
# 출력 
arg1: 10
args: (20, 30)
kwarg1: custom
kwargs: {'name': 'John', 'age': 22}

▼ 파이썬 과제 문제들 풀이

 

1. 대소문자 바꿔서 출력하기

# 방법 1

str = input()

for c in str:
    if c.isupper() == True:
        print(i.lower(), end="")
    else:
        print(i.upper(), end="")
# 방법 2
print(input().swapcase())
# 방법 3
str = input()
str2 = ''

for i in str:
    if i.isupper() == True:
        str2 += i.lower()
    elif i.islower() == True:
        str2 += i.upper()

print(str2)

 

 

2. 특수문자 출력하기

# 방법 1
print('!@#$%^&*(\\\'\"<>?:;')

# 방법 2
print(r'!@#$%^&*(\'"<>?:;')

 

 

3. 덧셈식 출력하기

# 방법 1
a, b = map(int, input().strip().split(' '))
print(f"{a} + {b} = {a + b}")

# 방법 2
a, b = map(int, input().strip().split(' '))
c = a + b
print('{} + {} = {}'.format(a, b, c))

 

 

4. 문자열 붙여서 출력하기

# 방법 1
str1, str2 = input().strip().split(' ')
print(str1+str2)
# 방법 2
str1, str2 = input().strip().split(' ')
s = ""
s += str1
s += str2
print(s)
# 방법 3
str1, str2 = input().strip().split(' ')
print(''.join([str1, str2]))

 

▽ join 함수 (이전에 문제를 풀때 블로그에 정리한 함수지만 다시한번 정리!)

'구분자'.join(리스트)를 이용하면 리스트의 값과 값 사이에 '구분자'에 들어온 구분자를 넣어서 하나의 문자열로 합쳐준다. '_'.join(['a','b','c'])라 하면 'a_b_c'와 같은 형태로 문자열을 만들어서 반환해 준다.

# join 함수 예제

#원본 리스트
a = ['a', 'b', 'c', 'd']
print(a) # ['a', 'b', 'c', 'd']

#리스트를 문자열로 합치기
result1 = "_".join(a)
print(result1) # 'a_b_c_d'

#리스트를 문자열로 합치기
result2 = ".".join(a)
print(result2) # 'a.b.c.d'

result3 = "".join(a)
print(result3) # 'abcd'

 

 

5. 문자열 돌리기

# 방법 1
str = input()
for i in str:
    print(i)
    
# 방법 2
print('\n'.join(input()))

 

 

6. 홀짝 구분하기

a = int(input())

if a % 2 == 0:
    print(f'{a} is even')
else:
    print(f'{a} is odd')

 

 

▼ 나머지 연산자 활용 예시 

#### 끝의 두자리 수만 원할때
num = 29384792835
print(num%100)

#### 요일
days_in_week = 7
current_day = 3  # 현재 요일 (예: 수요일이 3이라고 가정)
days_later = 10  # 10일 후

new_day = (current_day + days_later) % days_in_week
print(f"{days_later}일 후 요일은 {new_day}입니다.")

### 각도 회전
rotation = 370
normalized_rotation = rotation % 360
print(f"정규화된 각도: {normalized_rotation}도")  # 결과는 10도

 

그리고 % 나머지 연산자가 정말 쓰임새가 많다는 것을 알게되었다. 제일 쓸모없다고 생각했는데 전혀 예상치 못한...

'Coding > TIL & 배운것들' 카테고리의 다른 글

GitHub으로 AI활용하기  (3) 2024.11.11
허깅페이스 (Hugging Face)  (2) 2024.11.10
패키지 관리와 가상환경 설정  (2) 2024.11.08
AI 활용에 대해서  (2) 2024.11.08
수준별 학습에서 배운것들  (2) 2024.11.07