이차원 배열이란, 간단하게 말하면 배열(list etc..)안에 배열이 들어가있는 것을 말한다!
다차원 배열은 배열 안에 배열이 들어가있는 형식이다.
# 1차원 배열
1d_array = [1, 2, 3, 4]
# 2차원 배열
2d_array = [[1, 2], [3, 4], [5, 6]]
# 3차원 배열
3d_array = [[[1, 2],[3, 4]], [[5, 6],[7, 8]]]
더 간단하게 말하면 겉 껍데기 개수가 n차원의 n에 해당된다!!
불러올 땐 이런식으로 부르면 된다.
# 1차원 배열 호출
1d_array[3] # 4
# 2차원 배열 호출
2d_array[1][2] # 4
# 3차원 배열 호출
3d_array[0][1][1] # 4
n = 3
answer = [[0] * n]*n
print(answer) # [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
answer[0][0] = 1
print(answer) # [[1, 0, 0], [1, 0, 0], [1, 0, 0]]
answer[1][1] = 1
print(answer) # [[1, 1, 0], [1, 1, 0], [1, 1, 0]]
for
문을 사용하지 않고 이차원 배열을 생성하고 싶어서 곱하기로 만들어봤는데, 이상하게 요소가 한번에 변경이 안됐다!!
문제가 뭔가 싶어서 확인해 봤더니,
내가 한 방식은 아래와 같다...
1차원 배열을 복사하는 것이 아니라 1차원 배열의 주소를 복사합니다. 즉, 내부적으로는 1차원 배열이 하나만 존재하며, 이에 대한 주소만 n개의 변수에 저장되는 것입니다
그러니까,
answer = [[0] * n for _ in range(n)]
이런식으로 바꿔줘야 주소만 복사되지 않고 새 배열로 복사되는 것!!
pip
에 있는 라이브러리를 전부 삭제하고 싶을 때!
>pip freeze > requirements.txt
>pip uninstall -r requirements.txt -y
이렇게 순서대로 입력하면 된다.
혹시나 requirements.txt
에 있는 패키지를 설치하고 싶다면,
>pip install -r requirements.txt
이렇게 해주면 된다
# views.py
class ArticleView(APIView):
def post(self, request):
serializer = ArticleCreateSerializer(data=request.user)
print(serializer)
if serializer.is_valid():
serializer.save(author=request.user)
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
이렇게 post
로 글을 작성 후 저장하는 함수를 만들었다.
근데 Invalid data. Expected a dictionary, but got User.
라는 오류가 뜨면서 작동이 안된다...
터미널에 Bad Request: /articles/
라고 뜨는 걸 보면 valid
가 잘 안되는 것 같은데...
일단 어디서 막히는 지 확인하기 위해서 print문으로 중간중간 체크를 해줬다.
# views.py
print(serializer)
if serializer.is_valid():
print('valid 성공!')
serializer.save(author=request.user)
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
print('valid 실패...')
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
확인해보니까 첫 번째 줄까지는 잘 됨. is_valid()
에서 안 넘어가는 것 같다.
# serializers.py
class ArticleCreateSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = ("title", "image", "content", "author")
아니!!!
post
하위의 serializer
의 valid
를 체크할 때, author를 받지 않아야 넘어가는데 author을 넣어놔서 안되는 거였다!!
추가로,
class ArticleView(APIView):
def post(self, request):
serializer = ArticleCreateSerializer(data=request.user)
이 부분에서 request.user
가 아닌 request.data
로 해줘야 들어온 값들을 전부 받아올 수 있다... 유의하자!!!
네임 스페이스에 등록되어 있는 모든 이름들을 리스트로 반환해준다.
또한, 특정 무언가에서 사용 가능한 기능들을 확인할 수 있기도 하다.
dir([]) # 리스트에서 사용 가능 한 기능 출력
dir(math) # 특정 모듈에서 사용할 수 있는 기능을 출력하기도 한다.