goodthings4me.tistory.com
■ 패킹은 하나 이상의 값들을 묶는 행위이고, 언패킹은 묶여 있는 값들을 풀어내는 행위임
tpl = (1, 3, 4, 6) # 패킹
lst = [10, 20, 30, 40] # 패킹
a, b, c, d = tpl # 언패킹
print(a, b, c, d) # 1 3 4 6
x, y, *z = tpl # 언패킹
print(x, y, *z) # 1 3 4 6
print(x, y, z) # 1 3 [4, 6] - z는 리스트로 묶임
n, m, *others = lst # 언패킹
print(n, m, *others) # 10 20 30 40
print(n, m, others) # 10 20 [30, 40]
def nums():
return 1, 2, 3, 4, 5 # 파이썬은 여러 개의 리턴 값 가능(튜플 패킹, 소괄호 생략)
p, q, r, s, t = nums() # 언패킹
print(p, q, r, s, t) # 1 2 3 4 5
tt, *oth = nums() # 언패킹
print(tt, *oth) # 1 2 3 4 5
print(tt, oth) # 1 [2, 3, 4, 5]
■ 가변인자(Variable parameter) - *변수, **변수
# func(*iterable), func(**dict) : 함수 호출 시 언패킹으로 전달됨
def show_person(name, age, height):
print(name, age, height, sep=', ')
p = ('Choi', 24, 180)
show_person(*p) # Choi, 24, 180
#show_person(p) - TypeError : arguments 수 부족
pl = ['Park', 24, 180]
show_person(*pl) # Park, 24, 180 - 리스트도 언패킹 되어 전달
def show_nums(n, m, *other):
print(n, m, other, sep=', ')
show_nums(1, 2, 3, 4, 5) # 1, 2, (3, 4, 5) - 3번째 이후 값은 튜플로 other에 전달
def who(a, b, c):
print(a, b, c, sep=', ')
who(*[11, 22, 33,]) # 11, 22, 33 - 리스트
who(*(10, 20, 30)) # 10, 20, 30 - 튜플
who(*'god') # g, o, d - 문자열
# func(**dict) 예)
d = dict(a = 10, b = 20, c = 30) # {'a': 10, 'b': 20, 'c': 30}
who(*d) # a, b, c - 키(key)가 매개변수에 전달
who(**d) # 10, 20, 30 - 값이 매개변수에 전달 (key가 한 문자인 경우)
dd = dict(aa = 10, bb = 20, cc = 30) # {'aa': 10, 'bb': 20, 'cc': 30}
who(*dd) # aa, bb, cc
#who(**dd) # TypeError: who() got an unexpected keyword argument 'aa'
dic = {'apple': 20, 'banana': 15, 'orange': 30}
who(*dic) # apple, banana, orange
#who(**dic) # TypeError: who() got an unexpected keyword argument 'apple'
who(*dic.keys()) # apple, banana, orange
who(*dic.values()) # 20, 15, 30
who(*dic.items()) # ('apple', 20), ('banana', 15), ('orange', 30)
■ 함수 정의(선언) 시 매개변수 *args는 전달된 객체를 튜플로 묶어(패킹) 변수에 저장
def whos(*args):
print('type(args):', type(args), args)
whos({}) # type(args): <class 'tuple'> ({},)
whos([]) # type(args): <class 'tuple'> ([],)
whos(()) # type(args): <class 'tuple'> ((),)
whos(1) # type(args): <class 'tuple'> (1,)
whos(44, 55, 66, 77) # type(args): <class 'tuple'> (44, 55, 66, 77)
whos(*[44, 55, 66]) # type(args): <class 'tuple'> (44, 55, 66)
ts = 45, 43, 46
whos(ts) # type(args): <class 'tuple'> ((45, 43, 46),)
ls = [47, 27]
whos(ls) # type(args): <class 'tuple'> ([47, 27],)
■ 함수 정의(선언) 시 매개변수 **args는 딕셔너리의 생성으로 이어지며, 딕셔너리(key=value)의 형태로 전달해야 함
def func(**args): # 보통 **kwargs로 표시
print(type(args), args)
func(f = 10) # <class 'dict'> {'f': 10} - {'f': 10} 생성되어 args에 전달
func(a = 20, b = 30) # <class 'dict'> {'a': 20, 'b': 30}
func(f = 100, g = 200) # <class 'dict'> {'f': 100, 'g': 200}
#func(dic) # TypeError: func() takes 0 positional arguments but 1 was given
#func({'f': 100, 'g': 200}) # TypeError: func() takes 0 positional ~
#func(*dic) # func() takes 0 positional arguments but 3 were given
#func(*{'f': 100, 'g': 200}) # func() takes 0 positional arguments but 2 ~
# 각 인자를 positional arguments 로 인식, **args 형태가 아니라서 에러 발생
func(**dic) # <class 'dict'> {'apple': 20, 'banana': 15, 'orange': 30}
func(**{'f': 100, 'g': 200}) # <class 'dict'> {'f': 100, 'g': 200}
■ *args **kwargs에 값 동시 전달
def com_func(n, *args, **kwargs):
print(f'type(n) : {type(n)}') # type(n) : <class 'int'>
print(f'type(agrs) : {type(args)}') # type(agrs) : <class 'tuple'>
print(f'type(kwargs) : {type(kwargs)}') # type(kwargs) : <class 'dict'>
return print(n, args, kwargs)
com_func(10, 20, name = 'Park') # 10 (20,) {'name': 'Park'}
[참고 자료] 윤성우의 열혈 파이썬 중급편
블로그 인기글
Windows 10 탐색기 느려지는 증상과 해결하는 방법
잘 작동하던 Windows 10 탐색기가 갑자기 느려지는 증상이 발생했을 때 어떻게 조치를 하는지 구글에서 찾아보니 많은 해결책들이 있었으나 어떤 것이 정확한 해결책인지는 알 수가 없었다. 그래서 해결방법이라고 제시한 것들을 정리해 보았다. 윈도우 탐색기가 느려지는 증상 해결 방법 어느 순간부터 응용프로그램(VS Code 등)에서 폴더 열기나 파일 불러오기를 했을 때 검색 팝업창이 안 뜨거나 열리는 시간이 엄청 느려지는 증상과, 더불어서 탐색기도 실행이 많이 느려지는 증상이 있었다. 기존에 사용하던 VS Code에 openpyxl 설치 후 실행이 느려지는 증상이 발생하더니 윈도우10 탐색기도 느려져서 사용할 수가 없었다. 노트북에 OS(Windows10)를 설치한지 1년이 다 되어가긴 했지만, 1개월 전..
goodthings4me.tistory.com
[엑셀] 근무연수 및 근무 개월수 계산하는 함수
직장을 다니다 보면 몇 년 몇 개월 또는 전체 며칠을 다니고 있는지 궁금할 때가 있다. 아니면, 총무나 인사 일을 할 때 직원들의 근속연수 또는 근속개월수 등을 계산하고 싶을 때도 있다. 이런 경우 엑셀 함수를 활용하면 어떨까!! 근무연수 및 근무 개월수 계산 함수 알아보기 엑셀에서 근무연수 또는 근무 개월수 계산하는 것은 datedif() 함수를 사용하면 간단하게 해결할 수 있다. 아래 이미지를 보면서 설명하면, 셀 E1에 기준일자를 입력하고, 근무연수를 구할 때는 =datedif(B3,$E$1,"Y")&"년" 을 입력한다. 근무개월수는 =datedif(B3,$E$1,"M")&"개월" 처럼 입력한다. 일수까지 파악할 때문 별로 없지만, 심심풀이로 구해보고 싶을 때 =datedif(B3,$E$1,"D")..
goodthings4me.tistory.com
[국세청] 현금영수증가맹점으로 가입바랍니다. 메시지 해결방법(개인사업자)
▶ 현금영수증 가맹점 가입 메시지를 받고... 온라인 쇼핑몰 사업을 시작하려고 사업자등록증을 발급받고 난 후 얼마 안 있어서 국세청으로부터 어느 시점까지 '현금영수증 가맹점'으로 가입하라는 문자메시지가 받았었다. 그 메시지 기한이 오늘 도래했는데, 인터넷에서 찾아보니 홈택스에서 현금영수증 발급 사업자 신청을 할 수가 있었다. [관련내용] 홈>국세정책/제도>전자(세금)계산서/현금영수증/신용카드>현금영수증∙신용카드>가맹점가입 ▶ 홈택스 사이트에서 신청하는 절차는 다음과 같다. 우선, 홈택스에 로그인을 해야 합니다. 세상이 좋아져서 공인인증서 없이도 손쉽게 간편인증 로그인이 가능하다. 여러 인증방법 중 카카오톡 인증이 가장 편리한 거 같다. 간편인증 로그인 후 상단 '조회/발급' 탭 클릭 후 '현금영수증>현금..
goodthings4me.tistory.com
'코딩 연습 > 코딩배우기' 카테고리의 다른 글
[python] 입력받은 숫자 리스트에서 최대값과 그 위치(index) 찾기 (0) | 2020.08.24 |
---|---|
[python] 주사위 게임 (0) | 2020.08.23 |
[python] 제너레이터(Generators) 함수 & 표현식 (0) | 2020.08.21 |
[python] 소수(素數, prime number) 구하기 (0) | 2020.08.21 |
[python] 리스트 컴프리헨션(List Comprehension) & 이터러블(iterable) 객체 (0) | 2020.08.21 |
댓글