자동차 용 JSON 파일을 스크랩하는 재귀 스크립트가 있습니다. 각 재귀 레벨에서 새로운 변수가 추가되고, 다른 값과 함께 재귀 호출에 전달되며 매번 더 자세히 정보가 전달됩니다. locals()
을 사용하여 변수를 동적으로 할당하려고 시도했지만 호출 후에도 None
으로 남아 있습니다 (때때로 locals()
은 읽기 전용입니다).지역 변수를 동적으로 할당하는 변수가 재귀 함수에서 작동하지 않습니다.
나는 또한 eval()
을 사용해 보았는데, 그것은 나에게 똑같은 문제를 준다. (나는 eval이 이상하지 않다는 것을 안다.) 사전을 사용하는 것을 피하는 것이 이상적입니다. 왜냐하면 사전에 값을로드해야하기 때문에 먼저 불필요한 단계가있는 것처럼 보입니다. 그러나이 시점에서는 아무 것도 열지 않습니다.
예 :
scraper(manufacturer='Honda')
이 모델의 JSON 파일을 긁어 것은 model='Accord'
를 설정 한 다음 재귀의 year=2014
을 설정 년의 파일을 긁힌 자국
scraper(manufacturer='Honda, model='Accord')
를 호출하고 반복적 인
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)
이 문제를 처리하는 방법에 대한 의견을 보내 주시면 고맙겠습니다. 파이썬이 항상 일을하는 영리한 방법을 가지고있는 것 같아요. 그리고 항상 그것에 대해 더 많이 배우기 때문에 미리 감사드립니다! 그 아무것도
을 변경하면 내가
: 위치 및 키워드 인수를 혼합,
아니라 문자열 형식의 단지
예보다 : 유일한 차이점은 지금 호출 할 필요가 있다는 것입니다 [docs for'locals'] (https://docs.python.org/2/library/functions.html#locals) - * "** 참고 **이 사전의 내용은 수정해서는 안되며, 변경 사항은 영향을 미치지 않을 수도 있습니다 그 사이에 사용 된 지역 변수와 자유 변수의 값 preter. "* – jonrsharpe
'locals()'는 어쨌든 사전 일뿐입니다. 'locals' 대신에 당신 만의 사전과 모든 값을 만들어주세요. – BrenBarn
'값을위한 것 : ... return'이 성취하려고합니까? – Eric