2012-03-06 1 views
1

:파이썬 유사 코드 나는 다음과 같은 코드를 입력 파이썬 인터프리터에서 다른 출력

params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secre 
t"} 

print "&".join("%s_%s" % (i,y) for i,y in params.items()) 

그리고, 당연하게도, 내가받을 다음과 같은 출력 :

pwd_secret&database_master&uid_sa&server_mpilgrim 

을하지만 난 다음 코드를 실행하면 :

01 :
for i,y in params.items(): 
    print "&".join("%s_%s" % (i,y)) 

나는이 이상한 출력을 얻을
p&w&d&_&s&e&c&r&e&t 
d&a&t&a&b&a&s&e&_&m&a&s&t&e&r 
u&i&d&_&s&a 
s&e&r&v&e&r&_&m&p&i&l&g&r&i&m 

두 코드 블록 모두 동일한 작업을 수행하는 것으로 보입니다. 출력이 다른 이유는 무엇입니까?

+0

모두에게 도움을 주셔서 감사합니다. – naftalimich

답변

1

, 당신은 시퀀스를 생성하는 발전기 식을 사용하는 'pwd_secret'과 같은 문자열로 구성되며 그 사이에는 '&'이 삽입됩니다.

두 번째 경우에는 'pwd_secret'과 같은 각 문자열에서 join을 호출합니다. 문자열은 일종의 시퀀스이므로 join은 전달한 시퀀스의 각 요소 사이에 구분 기호를 배치합니다.

1

문자열 메서드 join은 문자열에서 작동하며 iterable을 인수로 취합니다. 앰퍼샌드 합류 각각의 문자로 나오는

print '&'.join('pwd_secret') 

:

p&w&d&_&s&e&c&r&e&t 
1

첫 번째 경우 예상대로 작동하는 두 번째 예에서는 사용자가 통과하고있는 반복 가능한가에 해당하는 문자열이며, - 각 터플을 &으로 결합하십시오.

print "&".join("pwd_secret") 

문자열이 반복 가능한, 그래서 그것은 결합 할 것입니다 :

print "&".join("%s_%s" % (i,y)) 

어떤이 첫 번째 항목 (예를 들어) 들어 할 것 : 두 번째 경우

, 당신은 문자열의 각 문자는 &으로 표시되며 출력이 표시됩니다.

3

str.join은 순서대로 작동합니다. 첫 번째 코드에서는 문자열 시퀀스를 처리하고 두 번째 코드에서는 루프 당 하나의 문자열 만 처리합니다. 문자열 자체 (문자) 시퀀스, 그래서 ... 확장

>>> " ".join(["Hello", "world!"]) 
'Hello world!' 
>>> " ".join("Hello world!") 
'H e l l o w o r l d !' 
3

첫 번째 경우는 실제로는 이것이다 : 첫 번째 경우

temp_list = list() 
for i,y in params.items(): 
    temp_list.append('%s_%s' % (i,y)) 
print '&'.join(temp_list) 
관련 문제