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'}
[참고 자료] 윤성우의 열혈 파이썬 중급편
블로그 인기글
유튜브 영상 등의 URL 주소를 QR코드로 만들기
네이버 QR코드, makeQR, MUST QRcode, 무료 온라인 QRCode 생성기 등의 웹사이트에서 유튜브 영상 등의 URL을 입력하여 QR코드를 만들 수 있다. QR코드를 생성할 수 있는 사이트와 프로그램 URL 주소를 붙여넣기 한 후 "QR 코드 생성" 버튼을 클릭하면 큐알코드가 이미지로 생성되고, 다운로드도 할 수 있는 사이트 https://truedoum.com/useful/qrcode/ # 유튜브에서 동영상 URL을 복사하는 방법 유튜브에서 QR코드를 만들 동영상을 검색한다. 해당 동영상을 클릭한다. 동영상 위에서 마우스 우클릭 후 나오는 팝업창에서 “동영상 URL 복사”를 클릭하거나 영상 하단의 “공유”를 클릭하여 나온 창에서 URL를 복사한다. 아래의 웹사이트 중 하나를 선택한 후 복사..
goodthings4me.tistory.com
엑셀 시트 분리 저장 - 엑셀 파일의 시트를 분리하여 저장하기
엑셀을 사용하다 보면 엑셀 시트를 분리해서 저장해야 할 때가 있다. 최근에도 이런 경우가 발생하여 구글링 후 엑셀 시트 분리 업무를 수행하고 내친김에 다른 사람들도 사용할 수 있도록 파이썬 tkinter로 프로그램으로 만들어 보았다. Excel Sheets 분리 저장하는 프로그램(with 파이썬 Tkinter) ※ 프로그램 다운로드(네이버 MYBOX에서 공유) : ExcelSeparateSheets.zip ▶ 프래그램을 실행하면 다음과 같이 초기 화면이 보인다. 찾아보기 : 엑셀 파일이 있는 폴더를 선택한다. (프로그램이 있는 최상위 디렉터리가 열린다) 실행하기 : 프로그램 실행 버튼 상태 변경 순서 : 실행전 → 실행 중 → Sheet "OOO" 분리 저장 중 → 실행 완료 실행 결과 확인 : 엑셀 파..
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 |
댓글