이걸 이제 알다니!!
감사합니다 소헌님...
Q ) 내 벨로그에서 가장 많이 등장하는 분은? ^__^....
왜 삼항이냐? 항이 3개!
Python뿐만이 아니라 다른 언어에서도 존재하는 개념이다!! 다만 언어마다 그 형태가 다를 뿐이다. python에서구조는 다음과 같다.
value1 if 조건 else value2
조건 이 참이면value1을, 조건이 거짓이면 value2의 값을 의미한다.
입력한 숫자 num이 짝수면 "짝수" 홀수면 "홀수" 를 출력하기
# -*- coding: utf-8 -*-
num = int(input('>>> '))
print("짝수" if num%2==0 else "홀수")
# -- coding: utf-8 --
vscode에서 한글을 인식하지 못하고 에러를 보냈다.SyntaxError: Non-ASCII character '\xec' in file ...(생략)
("짝수"라는 한글이 /xec 형태인가보다)
그래서 한글을 encoding하도록 위의 명령어를 입력해 주었다.
위 코드를 실행하면 다음과 같다
# by vscode
❯ python pj_test.py
>>> 3
홀수
❯ python pj_test.py
>>> 4
짝수
프로젝트관련 로직을 짜다가 조건에 따라 가져오는 값이 다른 로직이 필요했다.
한 게시물에 대한 댓글이 있으면 그 댓글들 중 가장 첫번째 댓글만 불러오고, 댓글이 하나도 없으면 "None" 내용을 갖도록 한다.
근데 이러한 형태의 field가 3개였다.
처음 작성한 코드는 다음과 같다.
# in posting/views.py
for posting in postings:
if not posting.comment.exists():
comment_user_image = "None"
comment_user_name = "None"
comment_content = "None"
else:
comment_user_image = posting.comment.get(id=1).user.image_url
comment_user_name = posting.comment.get(id=1).user.name
comment_content = posting.comment.get(id=1).content
보이는가. 화려한 6줄의 코드들.
보이는가. else 문으로 굳이 indent를 준 형태가.
처음엔 단순하게 생각해 저 형태를 모조리 삼항연사자 그대로 바꾸는줄 알았다.
for posting in postings:
(comment_user_image = "None" if not posting.comment.exists() else comment_user_image = posting.comment.get(id=1).user.image_url)
(comment_user_name = "None" if not posting.comment.exists() else comment_user_name = posting.comment.get(id=1).user.name)
(comment_content = "None" if not posting.comment.exists() else comment_content = posting.comment.get(id=1).content)
이렇게 하니 runserver 화면에서 다음과 같은 에러가 발생했다.
SyntaxError: cannot assign to conditional expression
"conditional"형태는 안된다니? value에 말그대로 value가 들어가야지. 무언가 "conditional"형태는 안되는가 싶어 수정했다.
for posting in postings:
comment_user_image = ("None" if not posting.comment.exists() else posting.comment.get(id=1).user.image_url)
comment_user_name = ("None" if not posting.comment.exists() else posting.comment.get(id=1).user.name)
comment_content = ("None" if not posting.comment.exists() else posting.comment.get(id=1).content)
잘 동작한다!!
삼항연산자를 통해 보기좋고 깔끔하게 코드를 정리할 수 있었다! 굿굿