我有一个递归脚本,它为汽车创建了一个JSON文件。在每个递归级别,它都会添加一个新变量,并将该变量(连同其他值)传递给递归调用,每次都会得到越来越详细的信息。我试图使用locals()
动态地分配一个变量,但即使在调用之后它仍然是None
(我记得有时看到locals()
是只读的)。你知道吗
我也尝试过使用eval()
,它也给了我同样的问题(我知道eval并不理想)。在理想情况下,我希望避免使用字典,因为这需要我首先用值加载它,这似乎有一些不必要的步骤,但目前我对任何事情都持开放态度。你知道吗
示例:
scraper(manufacturer='Honda')
将抓取模型的JSON文件,设置model='Accord'
,然后递归调用
scraper(manufacturer='Honda, model='Accord')
它会刮取一个数年的文件、set的year=2014
并递归调用
scraper(manufacturer='Honda', model='Accord', year='2014')
这是基本情况
def scraper(self, manufacturers, model=None, year=None):
if year:
scrapeurl = '%s&manufacturer=%s&model=%s&year=%s' % (url, manufacturer, model, year)
return someFinalFunction()
elif model:
scrapeurl = '%s&manufacturer=%s&model=%s' % (url, manufacturer, model)
elif manufacturer:
scrapeurl = '%s&manufacturer=%s' % (url, manufacturer)
j = getJSONFromUrl(scrapeurl)
key, values = j.popitems()
for value in values:
locals()[key] = value
return self.scraper(manufacturer, model, year, color)
我很感激任何关于如何处理这个问题的意见,我知道Python似乎总是有一些聪明的方法来做事情,而且我一直在学习更多关于它的知识,所以提前谢谢你!我在这个例子中也使用Python3,如果这改变了什么的话
现在还不完全清楚你想做什么,但也许这会有所帮助:
它使用Python的内置功能将任意关键字参数视为字典,并使用更现代的
str.format
字符串格式动态处理您要查找的参数。唯一的区别是你现在需要称之为:而不仅仅是
字符串格式、混合位置参数和关键字参数的示例:
locals()['key'] = value
应该是locals()[key] = value
最好使用
**kwargs
:相关问题 更多 >
编程相关推荐