250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- venv
- 함수성능평가
- time()
- Display
- sql
- vscode
- iterable
- position
- 우선순위
- onClick
- with\
- 함수실행시간
- googleappscript
- 내일배움캠프
- python
- 알고리즘
- WIL
- 프로그래머스
- Iterator
- gitignore
- target
- cte
- AI
- Level1
- itertools
- 가상환경
- AI 5기
- googlesheet
- A태그
- git #github #내일배움캠프
Archives
- Today
- Total
05의 개발 계발
[TIL] 230404 [Python] dictionary 의 key 인식 본문
728x90
TIL 학습목표
- dictionary의 key 인식 과정을 이해한다.
- dict['key'] 와 dict['item'] 의 차이와 올바른 사용법을 이해한다. (feat.pylint)
1) 문제점 (Problem)
팀원들과 페어프로그래밍을 하다가 다음과 같은 코드를 리뷰하였다.
# 딕셔너리가 item을 입력해도 key값으로 인식하는 비문()이슈 발생
for num in count_dict: # for i in 딕셔너리 --> 이런 for문을 쓰면 i가 딕셔너리의 키값과 동일한 자료형을 갖게 됩니다.
if count_dict[num] == max_count:
mode_list.append(num)
print(num)
위 코드에서 num 은 count_dict 이라는 딕셔너리의 아이템(요소) 이고, key : value 와 같이 하나의 쌍을 이룬다.
그런데 count_dict[num] 에서 num에 key 값이 아닌 item에 들어갔는데도, 코드의 결과는 key 값을 넣었을 때와 동일했다.
그 이유를 알아보자.
2) 시도해본 것들 (Try)
▶팀원들과 추측해보기
먼저 pylint의 warning을 보자.
*pylint : vscode의 확장으로, 코드상의 warning을 알려준다.
< 생각해보기 >
# dict_[key] = value | # 키를 입력 → 값을 출력 *동일한 결과
# dict_[item] = value | # 요소를 입력 → 값을 출력 *동일한 결과
# dict_[key:value] = value | # 동일한결과 ▶▶▶ 요소를 키로 인식한것인가?!
▶답해줘 GPT!
# for i in 딕셔너리 --> 이런 for문을 쓰면 i가 딕셔너리의 키값과 동일한 자료형을 갖게 됩니다.
GPT의 의견과 팀원들과 했던 추측으로 미루어 보아 비문이지만, python의 유연성으로 넘어가는 부분이라 결론을 지었다!
+ 튜터님께 문의한 결과, 비문이지만 파이썬이 추측하여 유연하게 넘어간 것이라고 한다.
하지만, 버젼에 따라 동작하지 않을 수도 있는 '비문' 이므로 key값을 입력하는 양식을 지켜주는 것이 좋다!
3) 해결 (Solution)
팀원들과 추측 + GPT + 튜터님
비문이지만 python의 직관성과 유연성이 적용된 예쁘지는 않지만 굴러가는 코드 라는 헤프닝이었다.
하지만 코드를 정확히 이해하고 사용해야함을 다시금 시사하는 경험이었다.
4) 알게 된 점 (Learnd)
결과를 알게된 점도 물론 좋았지만, 팀원들과 원인에 대해 스터디를 한 경험도 유익했다.
js에서는 console.log 였다면, python에서는 print() 라는 말 처럼 테스트 과정에서 단계별로 print를 하며 값과 타입을 확인하는 것도 좋은 경험이었다.
내가 짠 코드에 대한 메타인지 부분도 챙겨보도록 하자!
728x90
'TIL' 카테고리의 다른 글
[TIL] 230406 메소드(method)의 종류 (인스턴스 / 정적 / 클래스) (1) | 2023.04.06 |
---|---|
[TIL] 230405 [Python] [Django] VScode에서 설치 및 세팅하기 (1) | 2023.04.05 |
[TIL] 230403 [Python] 배열 뒤집기 _feat( [::] 슬라이싱) (0) | 2023.04.03 |
[TIL] 230331 [Python] 객체의 immutable(불변) 과 mutable(가변) (1) | 2023.04.01 |
[TIL] 230330 [VScode] 단축키 설정하기 - 터미널에서 python파일 실행 (2) | 2023.03.30 |