1차 프로젝트를 하며, 기본이 탄탄하지 않으면 계속 고전하겠다는 생각이 들었다.
새로 사용한 개념들도 무척 중요하지만 다시 한 번 파이썬 자료형을 복습하며
조금이라도 아차! 싶은 개념들을 다시 짚고 넘어가보자!
Q. 문자열에 오타가 발생하여 슬라이싱 하고, 다시 합쳐 넣기
A.
a = "live"
a[:1] = 'l' #a의 값을 1까지 슬라이싱
a[2:] = 've' #a의 값을 2부터 끝까지 슬라이싱
a[:1] + o + a[2:]
'love'
문자열 전체 : a[:]
사실 이 부분에서 고전하며, 기초 공부를 다시 해야겠다는 생각이 들었었다.
자주 사용하고 있던 구문임에도 다른 상황에서 사용해야 할 때, 왜 바로 생각이 나지 않던지...
A.
a = { 'name' = 'dodam' }
a['name']
= 'dodam'
a.get('name')
=> 'dodam
data['name']
등의 형태로 json의 값을 불러오기 위해
무척 많은 구문에 사용하고 있었으면서!!!!! 막상 응용해서 다른 구문에서 사용할 때
바로 생각이 나지 않았었다. 기초의 중요성...
a[2] = 'b'
{ 2 : 'b'}
이는 django를 통해 json data값을 뽑아낼 때도 유용하게 사용하고 있다!
a = { 'name' : 'dodam' , 'phone' : '01023456789', 'birth' : '0101' }
a.values()
=> dict_values(['dodam','01023456789','0101'])
# key와 value 쌍으로 얻기
a.items
=> dict_items([('name','dodam'),('phone','01023456789'),('birth','0101')
# 모두 지우기
a.clear()
.format
의 구문도 종종 사용하고 있었음에도 막상 이 구문이 뭘 의미하는지 의미를 잘 몰랐던 나...
의미를 명확하게 알고 사용해보도록 하자~
"I Love {0}".format("you")
=> "I Love you"
"I eat {0} apples".format(3)
=> "I eat 3 apples"
# 변수로 대입하기
number = 10
day = "three"
" I ate {0} apples. so I was sick for {1} days". format(number, day)
=> I ate10 apples. so I was sick for 10 days."
#변수로 넣기 + 이름으로 넣기 혼용해서 사용하기
"I ate {0} apples. so I was sick for {day} days.".format(10, day=3)
=>'I ate 10 apples. so I was sick for 3 days.'
: Comprehension이란 반복적으로 생성가능한 객체(object)를 생성하기 위한 방법이다.
주로, django에서 여러개의 객체를 생성해야 할 때, 객체를 정의해준 후 for문으로 반복출력해준다.
🌱 간단한 예시
a = []
for i range(5) :
a.append(i)
>>> a
[0,1,2,3,4]
>>>[i for i in range(5) if i % 2 == 0]
[0,2,4]
a라는 빈 배열을 만든 후 for문을 활용해 5까지의 범위를 지정해준다.
그 후 append를 활용해 a에 i객체를 넣어준다.
a를 출력하면? 5 이전까지 반복된 숫자들이 배열에 담겨 출력된다.
for문과 if문을 함께 활용해 5까지의 배열 중 짝수만을 출력할 수도 있다!
👍🏻 프로젝트 사용예시 (for review in reviews)
def get(self,request, review_id):
reviews = Review.objects.all()
result = []
result = [
{
"user" : review.user.id,
"product_id" : review.product_id ,
"created_at" : review.created_at,
"size_rating" : review.size_rating,
"color_rating" : review.color_rating,
"delivery_rating" : review.delivery_rating,
"all_rating" : all_rating['all_rating__avg'],
"title" : review.title,
"comment" : review.comment,
} for review in reviews]
reviews의 객체를 모두 불러오고, 결과값을 담을 빈 배열을 만들어준다.
result 객체의 들어갈 값들을 { key : value } 딕셔너리 형태로 알맞게 넣어준 후,
for문을 반복해 reviews의 객체들을 하나씩 result라는 빈 배열에 넣어준다.
프로젝트 사이트 중 리뷰 페이지를 작성할 때,
리뷰를 작성한 고객의 아이디를 마스킹하는 부분에 대한 고민을 했었다.
해당 부분 정규식을 사용해야겠다는 생각이 들고, 고민하던 중 진수님께서 손수 작성해주셨던 정규식이다!
아쉽게도 해당 부분은 프론트에서 진행하면 되는 부분이라는 멘토님의 답변을 받아
사용하지 않았지만, 정규식을 제대로 사용해 본 경험은 기록해두고 싶어 남겨본다!
import re
r = re.compile('(\S{4})\S*[@]\S+[.]\w+')
a = r.match('test@test.com')
email = 'test@test.com'
print(r.sub('\g<1>****',email))
=> test ****
: 정규식을 import 해온 후 re.compile을 활용해 정규표현식을 컴파일한다.
re.compile의 결과로 돌려주는 객체 r을 사용해 작업을 수행한다!
아이디 4개 이후 마스킹을 메타문자를 이용해 만들어준다.
\S : 문자와 매칭한다. {4} : 4개까지. [@], [.]이 포함되어 있는 문자열이다.
a라는 변수를 지정해 r변수가 문자열의 처음부터 끝까지 정규식과 매치하는지 조사한다. (r.match)
email 을 정의해준다.
프린트한다. r객체 중 정규식과 매칭되는 부분을 바꾸어준다. (r.sub)
코드를 치다보면.. 아주 기본 개념이지만, 객체를 불러와야 하는데 .을 찍어야하는지
_를 해야하는지 헷갈렸다... 얼른 익숙해져서 헷갈리지 않게끔하자!
장고 Shell 그리고 파이썬 IDLE과 많이 많이 더욱 더욱 친해져야겠다!