如何根据PEP8使用%参数格式化此字符串

时间:2014-07-16 20:12:37

标签: python pep8

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,
    ''
)

虽然如上所示格式化,但在SublimeText中没有关于PEP8的下划线,但它看起来很奇怪。我该如何格式化:

a)更好(代码更易读)

b)仍然按照PEP8?

3 个答案:

答案 0 :(得分: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 :(得分: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'

答案 2 :(得分: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是指导方针和建议,而不是一套严格的规则。