일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 파이썬
- AI
- objectdetection
- torch.nn.Module
- 가상환경
- torch
- rnn
- tensorflow
- __call__
- vsC
- NumPy
- Deep learning
- pychram
- ViT
- 컴퓨터비전
- Anaconda
- CNN
- __init__
- 파이썬문법
- pytorch
- Torchvision
- DeepLearning
- vision transformer
- 가상환경구축
- segmentation
- torch.nn
- LSTM
- 머신러닝
- python
- 딥러닝
- Today
- Total
인공지능을 좋아하는 곧미남
Packing, Unpacking 본문
함수나 클래스가 받은 여러개의 인자들을 하나의 객체로 관리 시키는것이 "Packing" 입니다.
"Packing"에는 두 가지 방법이 있습니다. 인자를 "Packing"하는 방법과 키워드를 "Packing"하는 방법입니다.
그 반대로 여러개의 인자들을 포함하고 있는 하나의 객체를 풀어주는 것이 "Unpacking"입니다.
마찬가지로 "Unpacking"에도 두 가지 방법이 있습니다. 인자를 "Unpacking"하는 방법과 키워드를 "Unpacking"하는 방법입니다.
오늘의 내용은 아래 목차와 같습니다.
< INDEX >
1. 인자를 "Packing"하는 방법
2. 키워드를 "Packing"하는 방법
3. 인자를 "Unpacking"하는 방법
4. 키워드를 "Unpacking"하는 방법
5. 고찰 및 딥러닝 모델 구축에 활용
1. 인자를 "Packing"하는 방법
- 인자를 Packing 하는 방법은 *를 함수나 클래스에서 전달받는 변수를 선언할때 변수 앞에 붙여주면 됩니다.
- 저 func 메서드와 B 클래스의 변수를 *parameters로 선언해놓고 여러인자 (b ,c, d)를 전달하면 3가지 원소를 가진 하나의 tuple 객체(1, 62, 'c')가 생성된다.
2. 키워드를 "Packing"하는 방법
- 인자를 Packing 하는 방법은 **를 함수나 클래스에서 전달받는 변수를 선언할때 변수 앞에 붙여주면 됩니다.
3. 인자를 "Unpacking"하는 방법
- 인자를 Unpacking 하는 방법은 *를 메서드나 클래스에 전달할 변수 앞에 붙여주면 됩니다.
4. 키워드를 "Unpacking"하는 방법
- 인자를 Unpacking 하는 방법은 **를 메서드나 클래스에서 전달받는 변수를 선언할때 변수 앞에 붙여주면 됩니다.
alpabat = {
'first' : "a",
'second' : "b",
"third" : "c",
"fth" : "d"
}
def unpacking(first, second, third, fth):
print(first)
print(type(first))
print(second)
print(type(second))
print(third)
print(type(third))
print(fth)
print(type(fth))
class A:
def __init__(self, first, second, third, fth):
self.first = first
self.second = second
self.third = third
self.fth = fth
def tell(self):
print(self.first)
print(type(self.first))
print(self.second)
print(type(self.second))
print(self.third)
print(type(self.third))
print(self.fth)
print(type(self.fth))
print(f"지금은 모두 packing되어 있다! 이렇게: {alpabat}")
# 하지만 *alpabat을 통해 list 원소를 순차적으로 Unpacking한다!
print("메서드 출력")
unpacking(**alpabat)
print("클래스 출력")
a = A(**alpabat)
a.tell()
- 키워드를 "Unpacking" 할때는 전달하는 Dict의 "Key" 변수와 클래스나 메서드에서 정의한 변수의 이름을 같게해야합니다! 그래야 작동합니다. alpabat의 key 값인 first, second, third, fth를 메서드와 클래스 변수명과 일치 필요!
alpabat = {
'first' : "a",
'second' : "b",
"third" : "c",
"fth" : "d"
}
def unpacking(first, second, third, fth):
class A:
def __init__(self, first, second, third, fth):
5. 고찰 및 딥러닝 모델 구축에 활용
"Packing"이나 "Unpacking"을 나누는 기준은 *, ** 기호를 어느 파라미터 앞에 붙이는 위치를 확인하시면 됩니다.
그리고 인자를 다룰지 키워드를 다룰지는 * 기호 하나를 사용하면 인자, ** 기호 두개를 사용하면 키워드라고 생각하시면 좀 더 쉽게 이해할 수 있습니다.
특이사항으로, 키워드를 "Unpacking" 할때는 전달하는 Dict의 "Key" 변수와 클래스나 메서드에서 정의한 변수의 이름을 같게해야합니다! 그래야 작동합니다.
한편으로는 딥러닝 BackBone 모델인 resnet을 구현할때 torchvision api 코드는 unpacking을 사용하여 layer의 구성을 시퀀스화 하였습니다.
해당 코드를 보시면, nn.Sequential(*layers)를 선언함으로서 layers list에 속한 원소 하나하나를 순서대로 "Unpacking"하여 시퀀스 layer를 구축합니다!
읽어 주셔서 감사합니다.
'code_study > python 내장함수' 카테고리의 다른 글
functools.partial() (0) | 2022.03.07 |
---|---|
OrderedDict는 딥러닝에서 어떻게 사용될까? (0) | 2022.02.08 |
Python 내장함수 setattr()와 getattr() (0) | 2022.01.13 |
가정 설정문 assert (0) | 2022.01.11 |
Python Class 상속, 오버라이딩, super() 내용 정리 및 코드 (0) | 2022.01.10 |