سؤال

وهنا حالتي:

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 على الرغم من ذلك قد تكون مشكلة منفصلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top