如何根据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?

也许让你觉得奇怪的是这个很长的字符串被分解以符合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
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是指导方针和建议,而不是一套严格的规则。

您可以使用自己选择的文本编辑器对其进行格式化。如果你找到一种更适合你的格式,你可以把它做得更好。您可以通过坚持PEP8来确保PEP8的合规性。

或者直接从urllib文档中:

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

最新更新