동적 시간 델타 생성 : 파이썬
문제
내 상황은 다음과 같습니다.
import foo, bar, etc
frequency = ["hours","days","weeks"]
class geoProcessClass():
def __init__(self,geoTaskHandler,startDate,frequency,frequencyMultiple=1,*args):
self.interval = self.__determineTimeDelta(frequency,frequencyMultiple)
def __determineTimeDelta(self,frequency,frequencyMultiple):
if frequency in frequency:
interval = datetime.timedelta(print eval(frequency + "=" + str(frequencyMultiple)))
return interval
else:
interval = datetime.timedelta("days=1")
return interval
시간 간격을 동적으로 정의하고 싶습니다 timedelta
, 그러나 이것은 작동하지 않는 것 같습니다.
이 작업을 수행하는 구체적인 방법이 있습니까? 여기에 유효하지 않은 구문이 있습니다.
더 좋은 방법이 있습니까?
해결책
구문을 사용하여 동적 인수가있는 함수를 호출 할 수 있습니다. func(**kwargs)
어디 kwargs
명명 된 인수에 대한 이름/값 매핑 사전입니다.
나는 또한 글로벌로 이름을 바꿨습니다 frequency
목록 frequencies
라인 이후 if frequency in frequency
전적으로 의미가 없었습니다.
class geoProcessClass():
def __init__(self, geoTaskHandler, startDate, frequency, frequencyMultiple=1, *args):
self.interval = self.determineTimeDelta(frequency, frequencyMultiple)
def determineTimeDelta(self, frequency, frequencyMultiple):
frequencies = ["hours", "days", "weeks"]
if frequency in frequencies:
kwargs = {frequency: frequencyMultiple}
else:
kwargs = {"days": 1}
return datetime.timedelta(**kwargs)
가치가있는 것에 대해 문체 적으로는 일반적으로 발신자가하는 오류를 조용히 수정하기 위해 눈살을 찌푸립니다. 발신자가 유효하지 않은 인수로 전화하면 계속 삐걱 거리는 것을 시도하기보다는 즉시 그리고 큰 소리로 실패해야 할 것입니다. 나는 그것에 반대하는 것을 추천합니다 if
성명.
가변 길이 및 키워드 인수 목록에 대한 자세한 내용은 다음을 참조하십시오.
다른 팁
당신의 사용 print eval(...)
약간 과도하게 복잡하게 보입니다 (그리고 언급 한대로 잘못).
키워드 인수를 함수에 전달하려면 그냥하십시오.
interval = datetime.timedelta(frequency = str(frequencyMultiple)
키워드 인수가 표시되지 않습니다 frequency
그러나 그것은 별도의 문제 일 수 있습니다.
제휴하지 않습니다 StackOverflow