【问题标题】:Python- re-assigning object variables within script multiple times- good practice?Python-在脚本中多次重新分配对象变量-好的做法?
【发布时间】:2017-09-25 09:16:20
【问题描述】:

例如,我在“Scraper()”类中有一个函数“artistsearch”,它接受参数“website”、“artist”、“keyword”和“rangenum”,我想多次使用这个函数在不同值的脚本中。像下面的示例中那样简单地重新分配变量是通常的做法,还是有更多的pythonesque方式来做到这一点?

# Set values for first instantiation

website="https://www.examplewebsitenumber1.com/"
artist="Da Vinci"
keyword="painting"
rangenum=7

# instantiate to object devinci
devinci=Scraper()

# run function
devinci.artistsearch(website, artist, keyword, rangenum)

# Set values for second instantiation

website="https://www.examplewebsitenumber2.com/"
artist="Gaudi"
keyword="sculpture"
rangenum=9
# instantiate to object gaudi
gaudi=Scraper()

# run function again with different values
gaudi.artistsearch(website, artist, keyword, rangenum)

and so on.........

【问题讨论】:

  • 我认为你需要一个字典列表。

标签: python python-3.x function class


【解决方案1】:

重用变量完全没问题(您只是将名称重新分配给其他东西),但在您的情况下,您似乎需要一个循环和一个字典列表作为关键字参数传递

arglist = [
    {
        website: "https://www.examplewebsitenumber1.com/",
        artist: "Da Vinci",
        keyword: "painting",
        rangenum: 7
    }, {
        website:"https://www.examplewebsitenumber2.com/",
        artist: "Gaudi",
        keyword: "sculpture",
        rangenum: 9
    }
]

for args in arglist:
    devinci = Scraper()
    devinci.artistsearch(**args)

**args 作为参数传递与解压当前字典相同。示例:

devinci.artistsearch(
    website="https://www.examplewebsitenumber2.com/",
    artist="Gaudi",
    keyword="sculpture",
    rangenum=9
)

我当然不确定artistsearch 中的参数名称,但你明白了(在最坏的情况下,创建一个列表列表并将参数作为位置传递,artistsearch(*args) 在这种情况下)

【讨论】:

  • 到目前为止,两个答案都很好,但这个答案给了我一些额外的见解,我现在可以扩展。我能问一下双**和单*吗?它们代表什么?
  • 哦,废话,没有意识到我可以在没有获得批准的情况下进行编辑。我更新了arglist 的格式和更漂亮的函数调用,如果你不喜欢它,请恢复它。
【解决方案2】:

我建议列出list

to_scrape = [["https://www.examplewebsitenumber1.com/", "Da Vinci", ..], ["https://www.examplewebsitenumber2.com/", ..]]
instance=Scraper() #if you need define this inside for loop.
for i in to_scrape:
    instance.artistsearch(*i)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2018-05-09
    • 2019-03-31
    相关资源
    最近更新 更多