Ssa!
파이썬 실강 6일차! 본문
1. 함수 심화
인자에 기본값 지정해주기
parameter default value 즉 기본 매개변수라는 뜻으로 함수를 선언할 때 부터 인자값을 설정한다.
아래 코드를 보면 (option=None) 처럼 할당해줄 수 있다. 또한 num1과 num2도
num1 = 2 , num2= 3 처럼 처음부터 할당해 줄 수 있다. !
# 함수를 선언할 때 인자에 기본값을 지정해줄 수 있습니다.
EXPRESSION = {
0: lambda x, y: x + y ,
1: lambda x, y: x - y ,
2: lambda x, y: x * y ,
3: lambda x, y: x / y
}
def calc(num1, num2, option=None): # 인자로 option이 들어오지 않는 경우 기본값 할당
"""
option
- 0: 더하기
- 1: 빼기
- 2: 곱하기
- 3: 나누기
"""
return EXPRESSION[option](num1, num2) if option in EXPRESSION.keys() else False
print(calc(10, 20)) # False
print(calc(10, 20, 0)) # 30
print(calc(10, 20, 1)) # -10
print(calc(10, 20, 2)) # 200
print(calc(10, 20, 3)) # 0.5
args/kwars에 대한 이해
args/kwars를 사용하면 좋은 점은 동적으로 데이터를 할당할 수 있다는 큰 장점이 있다
args는 튜플형태, kwargs는 딕셔너리형태이다.
(따로 변수이름을 정하는 것 처럼 *튜플 **딕셔너리 이런식으로 해도 같지만 파이썬의 스타일가이드의 약속대로 args, kwargs로 쓴다)
args(arguments)와 keyword arguments(kwargs)는 함수에서 인자로 받을 값들의 갯수가
불규칙하거나 많을 때 주로 사용된다
인자로 받을 값이 정해져있지 않기 때문에 함수를 더 동적으로 사용할 수 있다
함수를 선언할 때 args는 앞에 *를 붙여 명시하고, kwargs는 앞에 **를 붙여 명시한다.
먼저 args 활용 예제를 본다면
add라는 함수에 1,2,3,4,5,....어떤 숫자라도 넣을 수 있다. 위에서도 말했듯이 데이터를 동적으로 할당할 수 있다!
def add(*args):
# args = (1, 2, 3, 4) -> 튜플형태
result = 0
for i in args:
result += i
return result
print(add()) # 0
print(add(1, 2, 3)) # 6
print(add(1, 2, 3, 4)) # 10
kwargs 활용 예제를 본다면 args라는 것과는 다르게 딕셔너리 형태로 가져온다,
(get 메소드는 key에 해당하는 value를 가져온다는 뜻이다)
def set_profile(**kwargs):
"""
kwargs = {
name: "lee",
gender: "man",
age: 32,
birthday: "01/01",
email: "python@sparta.com"
}
""" # -> 딕셔너리 형태
profile = {}
profile["name"] = kwargs.get("name", "-")
profile["gender"] = kwargs.get("gender", "-")
profile["birthday"] = kwargs.get("birthday", "-")
profile["age"] = kwargs.get("age", "-")
profile["phone"] = kwargs.get("phone", "-")
profile["email"] = kwargs.get("email", "-")
return profile
profile = set_profile(
name="lee",
gender="man",
age=32,
birthday="01/01",
email="python@sparta.com",
)
print(profile)
# result print
"""
{
'name': 'lee',
'gender': 'man',
'birthday': '01/01',
'age': 32,
'phone': '-',
'email': 'python@sparta.com'
}
"""
보통 args와 kwargs 를 활용할 때는 한개만 각각 잘 쓰지는 않고 두개를 잘 활용해서 쓴다고 한다. 특히 장고에서 수도 없이 볼 것이라고 튜터님이 말씀해주셨다.
def print_arguments(a, b, *args, **kwargs):
print(a)
print(b)
print(args)
print(kwargs)
print_arguments(
1, # a
2, # b
3, 4, 5, 6, # args
hello="world", keyword="argument" # kwargs
)
# result print
"""
1
2
(3, 4, 5, 6)
{'hello': 'hello', 'world': 'world'}
"""
2. 패킹과 언패킹
패킹(packing)과 언패킹(unpacking)은 단어의 뜻 그대로 요소들을 묶어주거나 풀어주는
것을 의미한다.
list 혹은 dictionary의 값을 함수에 입력할 때 주로 사용한다.
리스트와 딕셔너리 뿐만 아니라 튜플, 집합도 가능하다, 너무 고정관념에 박혀있지는 말자. 밖에 있는 괄호를 없애준다!라고 생각하면 편하다. 그렇지만 괄호안에 괄호가 있는 경우는 둘다 풀 수 없다. 예를 들어 [ [1], 1,2,3,4]를 언패킹하자면
[1],2,3,4가 된다. 유의하자!
간단하게 list의 활용을 보자면
numbers에 있는 값을 언패킹을 해준 다음 add함수로 하나씩 더해준다.
그치만 여기서 함정이 있다 언패킹을 사용하지 않을 시 numbers = [1,2,3,4]가 덩어리 형태로 되어 TypeError가 뜨니 항상 조심하자!
def add(*args):
result = 0
for i in args:
result += i
return result
numbers = [1, 2, 3, 4]
print(add(*numbers)) # 10
"""아래 코드와 동일
print(add(1, 2, 3, 4))
"""
dict에서의 활용도 보자
딕셔너리 언패킹을 하려면 * 1개가 아닌 ** 2개를 써줘야 언패킹이 되는 것 유의하자!
def set_profile(**kwargs):
profile = {}
profile["name"] = kwargs.get("name", "-")
profile["gender"] = kwargs.get("gender", "-")
profile["birthday"] = kwargs.get("birthday", "-")
profile["age"] = kwargs.get("age", "-")
profile["phone"] = kwargs.get("phone", "-")
profile["email"] = kwargs.get("email", "-")
return profile
user_profile = {
"name": "lee",
"gender": "man",
"age": 32,
"birthday": "01/01",
"email": "python@sparta.com",
}
print(set_profile(**user_profile))
""" 아래 코드와 동일
profile = set_profile(
name="lee",
gender="man",
age=32,
birthday="01/01",
email="python@sparta.com",
)
"""
# result print
"""
{
'name': 'lee',
'gender': 'man',
'birthday': '01/01',
'age': 32,
'phone': '-',
'email': 'python@sparta.com'
}
"""
느낀점
파이썬에 대한 기본 개념 강의는 끝이 났다. 맛보기로 튜터님이 객체지향에 대해서도 가르쳐주셨는데 아직은 이해가 잘안다. class의 상위개념이라 어려운 것도 있다. 기본 파이썬 개념에 머무리지말고 더 깊숙하게 들어가고 싶다! 파이썬 실강은 끝이 났지만 계속해서 파이썬에 관한 심화 개념을 올릴 예정이다!
'언어 > python' 카테고리의 다른 글
| 파이썬 문법 응용 과제 (0) | 2022.09.15 |
|---|---|
| 파이썬 심화 문법 과제 (튜터님) (0) | 2022.09.15 |
| 파이썬 심화 문법 과제 (0) | 2022.09.14 |
| 파이썬 실강 5일차! (0) | 2022.09.14 |
| 파이썬 클래스 과제 (0) | 2022.09.14 |