2014-07-16 2 views
3
url_base = ("https://maps.googleapis.com/maps/api/place/search/json?" 
      "location=%s,%s&radius=500&types=food|doctor&sensor=false&" 
      "key=%s&pagetoken=%s") % (
    r['lat'], 
    r['lng'], 
    YOUR_API_KEY, 
    '' 
) 

위와 같이 서식을 지정했지만 PEP8에 관한 SublimeText에는 밑줄이 없지만 이상하게 보입니다. 어떻게 포맷 할 수 있습니다PEP8에 따라 % 문자열을 사용하여이 문자열의 서식을 지정하는 방법

가) 더 나은 (코드

b)는 더 읽을 수) 여전히 PEP8에 따라?

+2

"더 좋음"을 정의하십시오. – chepner

+4

은'urllib.urlencode'와 같은 것을 사용합니다. – Daniel

+0

@chepner 감사합니다! 당신의 아이디어를 위해! 이것은 아주 좋다! ' "better"== 코드가 더 읽기 쉽고 PEP8을 만난다. – andi

답변

3

어쩌면 이상하게 보일 수있는 것은 매우 긴 문자열이 PEP8을 준수하도록 분리되는 방식입니다. 그러나 매우 긴 문자열을 분리해야하는 경우 올바른 방법으로 수행하고 있습니다. 병렬로 배치 된 두 개의 문자열은 Python에 의해 자동으로 연결됩니다.

특정 상황에서는 매우 긴 문자열을 쓸 필요가 없습니다. 대신 urllib.urlencode을 사용하여 매개 변수의 서식을 지정할 수 있습니다.

import urllib 
url_base = "https://maps.googleapis.com/maps/api/place/search/json?" 
params = urllib.urlencode(
    {'location': '{},{}'.format(r['lat'], r['lng']), 
    'radius': 500, 
    'types': 'food|doctor', 
    'sensor': 'false', 
    'key': YOUR_API_KEY, 
    'pagetoken': '' 
    }) 
url = url_base + params 
+1

@ k.rozycki : PEP8 편집 주셔서 감사합니다! – unutbu

1

원하는 형식으로 text editor을 사용하여 포맷 할 수 있습니다. 자신에게 맞는 형식을 찾으면 더 나아질 수 있습니다. 또한 PEP8을 준수하여 PEP8을 준수 할 수 있습니다. 바로 urllib docs에서

또는 :

>>> import urllib 
>>> params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0}) 
>>> params 
'eggs=2&bacon=0&spam=1' 
>>> url = 'http://www.musi-cal.com/cgi-bin/query?' + params 
>>> url 
'http://www.musi-cal.com/cgi-bin/query?eggs=2&bacon=0&spam=1' 
1
from urlparse import urlunparse 

query_params = { "location": "%s,%s" % (r['lat'], r['lng']), 
       "radius": "500", 
       "types": "food|doctor", 
       "sensor": "false", 
       "key": YOUR_API_KEY, 
       "pagetoken": "" 
} 

url_base = (urlunparse(("https", "maps.googleapis.com", 
         "/maps/api/place/search/json", None, 
         "&".join("=".join(qp) for qp in query_params.items()), 
         None)), 
) 

그래도 기억 PEP8 가이드 라인과 제안, 규칙하지 하드 세트입니다.

+1

나는이 예제에서 lat와 long 사이의 명령과 같은 인코딩 된 값을 다루는 여러 가지 REST API에 문제가 있었기 때문에''urlencode''을 사용하지 않았다. –

관련 문제