سؤال

لدي عدة طبقات من مكالمات الوظائف ، تتجول في قاموس مشترك لحجج الكلمات الرئيسية:

def func1(**qwargs):
    func2(**qwargs)
    func3(**qwargs)

أود تقديم بعض الوسائط الافتراضية في بعض مكالمات الوظائف اللاحقة ، شيء من هذا القبيل:

def func1(**qwargs):
    func2(arg = qwargs.get("arg", default), **qwargs)
    func3(**qwargs)

المشكلة في هذا النهج هي أنه إذا كان ARG داخل QWARGS ، يتم رفع نوع من النوع "حصلت على قيم متعددة لوسيطة الكلمات الرئيسية".

لا أرغب في تعيين QWARGS ["ARG"] على الافتراضي ، لأنه بعد ذلك يحصل FUNC3 على هذه الوسيطة دون أمر قضائي. يمكنني عمل نسخة. كوب من QWARGS وتعيين "ARG" في النسخة ، ولكن يمكن أن يكون لدى QWARGs هياكل بيانات كبيرة فيها ولا أريد نسخها (ربما لا يمكن للنسخ. ؟).

ما هو الشيء الذي يجب فعله هنا؟

هل كانت مفيدة؟

المحلول

مجرد بناء واستخدام قول آخر لغرض الاتصال func2, ، ترك الأصل بمفرده للدعوة اللاحقة إلى func3:

def func1(**qwargs):
    d = dict(arg=default)
    d.update(qwqargs)
    func2(**d)
    func3(**qwargs)

هذا إذا كنت تريد إعدادًا لـ arg في qwargs لتجاوز default. خلاف ذلك (إذا كنت تريد default لتجاوز أي إعداد ممكن ل arg في qwargs):

def func1(**qwargs):
    d = dict(qwargs, arg=default)
    func2(**d)
    func3(**qwargs)

منذ حجة الكلمات الرئيسية dict يتجاوز القيمة في الوسيطة الموضعية ، إن وجدت.

نصائح أخرى

لإنشاءيل جديد مع نفس المفاتيح والقيم التي يمكنك استخدامها

 newdict=dict(qwargs)

إذا كان QWARGS لا يحتوي على العديد من المفاتيح الرخيصة.

إذا كان من الممكن ، يمكنك إعادة كتابة الوظائف لأخذ ARGS الخاصة بهم حقًا مثل DICT بدلاً من ARGS المتعددة.

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