循环时动态字符串格式化 - python

Dynamic String formatting while looping - python

我一直在寻找一种优雅的方式来动态格式化 Python 中的字符串(URL),同时循环......这是当我想请求使用每个都有不同的查询参数。

例如,这就是我目前一直在使用的方法(假设我有 3 个 URL):

for i in range(3):
    for num in range(0, 496, 5):
        if i == 1:
            requests.get('https://my-website.com?pricefrom={}&priceto={}'.format(num, num + 5))

        if i == 2:
            requests.get('https://my-website.com?qtyfrom={}&qtyto={}'.format(num, num + 5))

        # ......... :(

这太丑了,我不想想象在我有更多链接可以请求的情况下我会做什么。

有没有解决办法simpler/more像这样优雅的例如:

urls = [<url1>, <url2>,....<url50>] # maybe each url has placeholders

for url in urls:
    # do some magic

非常感谢任何帮助

您可以像您所说的那样在列表中存储具有格式的字符串:

import requests

urls = ['https://example.com?from={fr}&to={to}',
        'https://example1.com?from={fr}&to={to}',
        'https://example2.com?from={fr}&to={to}'
]
for url in urls:
    for num in range(0, 496, 5):
        requests.get(url.format(fr=num, to=num + 5))

同样在 python 3.6 中你可以使用 f-strings

感谢@luminousmen 和其他人的帮助...我找到了解决方案。显然你可以只添加占位符而不对它们做任何操作 :'D :

urls = ['https://example.com?from={}&to={}', 
        'https://example1.com?from={}&to={}',
        'https://example2.com?from={}&to={}']

for url in urls:
    for num in range(0, 496, 5):
        requests.get(url.format(num, num + 5))