파이썬 초보 문법질문이요..


if ch in digits:
            return {
                0: {k1or4: 1 if k1or4 in digits else 4 for k1or4 in digits+letters},
                1: {k1: 1 for k1 in digits},
            }[aa][ch]

Dictionary 표현은 알겠는데, 뒤에 if, for 을 어떻게 해석해야 하는건지 모르겠습니다..

그리고 return { }[ ][ ] 이건 무슨 표현인가요??

  • 2016년 04월 01일에 작성됨

조회수 298


1 답변


좋아요
3
싫어요
채택취소하기

위의 코드는 다음과 같이 생각하실 수 있습니다.

# 리턴시에 생성하지 않고, 미리 생성 -- 풀어썼을 경우.
d = {0: {}, 1: {}}

for k1or4 in digits+letters:
  if k1or4 in digits:
    d[0][k1or4] = 1
  else:
    d[0][k1or4] = 4

for k1 in digits:
  d[1][k1] = 1

if ch in digits:
  return d[aa][ch]

질문하신 표현은 그냥 return할때 해당 dictionary를 만든 후에 aach 변수값에 따른 결과값을 가져오는 표현입니다. (위의 코드 마지막줄 참고)

앞뒤 코드가 없이는 정확히 말하기 어렵지만.. 일단 aa 변수는 0이나 1의 값을 가질 수 있고 ch의 값에 따라 d[aa] dictionary안의 값을 가져오네요. 한가지 의아한점은 이 코드만 가지고 보면 리턴값은 항상 1일것 같네요(?). aa가 0일때나 1일때나 chdigits 안에 존재하는 값이라면 항상 1의 값을 가지고 있기 때문이죠.

  • 2016년 04월 01일에 작성됨
    CEO & Researcher @ Theori. Security / Hacking.

  • Wow! 바로 이해됐네요. 코드는 과제로 제공받은것 중 일부라서, 변수이름이랑 앞뒤 코드 잘라서 올렸습니다^^; 문법만 질문 드리고 싶어서.. 채택하고 갑니다 감사감사     Sizzzz   2016.4.1 13:23     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close