*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 |