2013-08-23 2 views
0

저는 "헤드 퍼스트 프로그래밍"이라는 책을 통해 작업하고 있는데, 왜 그들이 이것을하고 있는지 혼란스러워하는 부분이 있습니다.
텍스트에 대한 이유나 설명이없는 것으로 보입니다.문자열을 사용하여 해시 키 이름 지정 하시겠습니까?

문제는 문자열에서 분할 데이터를 해시로 할당하기 위해 다중 할당을 사용하는 것입니다 (해시를 사용하는 이유는 이해가되지 않습니다.하지만 물어 보면 해시가 별개입니다. 발행물). 다음은 예제 코드입니다 :이 문자열 line을 각각라는 이름의 부분으로 그것을 분할 할 것을 이해

line = "101;Johnny 'wave-boy' Jones;USA;8.32;Fish;21" 
s = {} 
(s['id'], s['name'], s['country'], s['average'], s['board'], s['age']) = line.split(";") 

,하지만 난 이해가 안 나는 왜 키가 문자열을 사용하여 이름이되고있다 생각, 이전에 단 몇 페이지 만 올랐을 때 작은 따옴표없이 다른 변수와 마찬가지로 이름이 지정되었습니다.
개별 부품의 용도는 개별 요소를 기준으로 검색 한 다음 화면에 인쇄해야합니다. 예를 들어 ID 번호로 검색 한 다음 전체를 반환 할 수 있습니다.

문제가되는 언어는 문제가되는 경우 Python입니다. 이것은 혼자서이 물건을 배우려고하기 때문에 오히려 혼란 스럽습니다.
개인적으로 가장 잘 추측하는 것은 그것이 차이가 없으며 저자의 일부분이 개인적으로 선호한다는 것입니다.하지만 갑자기 의미가 없으면 갑자기 형태를 바꿀 거라는 것을 깨달았습니다. 그들은 그것을 설명하지 않는다.

편집 : 그래서 이름 주위에 작은 따옴표를 사용하거나 사용하지 않고 id 키를 인쇄 해 보았습니다. 어느 쪽이든 완벽하게 작동했습니다. 그러므로 개인적으로 선호하는 문제라고 생각해야하지만, 장기적 관점에서 실제로 변화가 있는지 여부를 실제로 알고있는 사람의 정보가 필요합니다.

편집 2 : 분명히, 내 파이썬 인터프리터 실제로 내가 준 것을들과 협력 방법에 대한 어떤 이해가되지 않습니다, 그래서 같이 https://www.youtube.com/watch?v=52GQJEeSwUA

+1

그들은 실제로'{}'a * hash *를 호출합니까? 그것은 * dict *입니다. 해시는 펄 용어입니다. –

+1

저자가 질문에 인용하지 않은 다른 예를 기반으로이 구체적인 예를 쓰는 이유를 설명해 줄 것을 요청합니까? 우리가 당신에게 말할 수있는 것은별로 없습니다. 할당 라인은 사전에 여러 개의 할당을 수행합니다. 튜플 - 언 패킹과 항목 할당을 결합하는 것을 제외하고는 특별한 것이 없습니다. – Bakuriu

+0

내 질문에'(s [ 'id'], s [ 'name'], s [ 'country'], s [ 'average'], s [ 'board'], s [ 'age']) = line.split (";")'행은 대괄호 사이의 비트 주위에 작은 따옴표를 둡니다. 분명히 필요하지는 않습니다. –

답변

2

실제로 작업 그것의 화면 캡처를했다 사전 (파이썬의 해시 용어)에 대해서는 따옴표가있는 것과 그렇지 않은 것 사이에 의미 적으로 차이가 있습니다. 예를 들어

는 :

s = {} 
s['test'] = 1 
s['othertest'] = 2 

은 '시험'과, 두 개의 키와 S라는 사전 정의 'othertest.' 그러나, 나는 시도하는 경우 대신이 작업을 수행합니다 :

s = {} 
s[test] = 1 

내가 나가서 설명하자면 NameError 예외를 얻을 것,이 키로 사용되는 시험이라고 정의되지 않은 변수를 찾는 것 때문이다.

경우, 다음, 나는 파이썬 인터프리터에이를 입력했다 :

>>> s = {} 
>>> s['test'] = 1 
>>> s['othertest'] = 2 
>>> test = 'othertest' 
>>> print s[test] 
2 
>>> print s['test'] 
1 

당신은 따옴표를 가진 키로 테스트를 사용하여 관련 항목을 찾기 위해 그 변수의 값을 사용하는 것을 볼 수 있습니다 사전에.

편집 : 이제 재미있는 질문은 s [id]를 사용하여 예상 한 것입니다. 키워드 "id"는 실제로 Python에서 내장 함수로, 인수로 전달 된 객체의 고유 ID를 제공합니다.세상에서 파이썬 인터프리터가 s [id]라는 표현으로 무엇을하고 있는지는 저에게 완전한 신비입니다.

편집 2 : OP의 유튜브 비디오를 보면서 ID 나 'ID'사용에 대한 해시를 할당하고 읽을 때 일관성을 유지한다는 것은 분명합니다. 따라서 해시 키와 같은 기능 ID는 아무렇지도 않게 정렬되어 있습니다. 'id'를 해시 키로 사용하십시오. 그것은 저를 잠시 걱정하게했습니다.

+0

[link] (https://www.youtube.com/watch?v=52GQJEeSwUA) –

+0

예, 그게 이상하고 어쩌면 바람직하지 않은 행동이지만, 임의의 내장 함수를 해시로 전달한다는 사실 키는 어떻게 든 그 함수의 이름을 가진 문자열을 전달하는 것과 똑같은 결과를 낳습니다. 실제로 알지 못하는 미리 정의 된 식별자를 사용할 때 인터프리터에서 이상한 동작을 일으킬 수있는 것을 많이 말하지 않습니다. –

+0

@Andrew : 값을 저장할 때나 액세스 할 때 키를 변경합니다. 물론 결과는 동일합니다! – Junuxx

2

나는 왜 제가 키가 문자열을 사용하여 이름이되는 생각, 단지 몇 페이지 전에, 그들은 다른 변수와 같은 이름을 때, 작은 따옴표없이 이해하지 못하는

대답은 바로 거기에 있습니다. 견적이 없으면 mydict[s], s이고 변수는 s의 값에 따라 사전을 조회합니다.

문자열 인 경우 문자 그대로 해당 키를 조회합니다.

예를 들어 s[name]은 변수 name에 액세스하려고 시도하므로 작동하지 않습니다.이 변수는 아마도 설정되지 않았습니다.

EDIT : 그래서 나는 id 키를 모두 인쇄했는데 이름을 따서 따옴표없이 붙이려고했다. 순수한 행운의

... id라는 내장 함수있다 :

>>> id 
<built-in function id> 

다른 이름을 시도하고 당신이 그것을 작동하지 않습니다 것을 볼 수는.

+0

좋아, 다른 것과 시도해 보니 작동하지 않아서 네 말이 맞아. 그들이 책의 어느 곳에서도 그것을 설명하지 않는다는 것이 얼마나 이상한가. 잘못된 용어를 어떻게 사용하고 있는지, 그리고 왜 그들이 큰 차이를 만드는 이유를 설명 하는지를 고려하여 전반적인 품질에 대해 질문하게합니다. –

+0

좋은 책이 많이 있습니다. 다른 책을 선택하십시오.) –

관련 문제