استخدم متغيرًا لم يتم تعريفه بعد على أنه kwarg في Python

-1

إليك إعدادي:

X = [0,1,2,3]
y = [10,20,30,40]

def mainfunc(X,y,**kwargs):
    for i in range(len(y)):
        c = subfunc(a=X[i],b=y[i],**kwargs)
        print c

def subfunc(a,b,c=None):
    if c is not None:
        return a*b + c
    else:
        return a*b

إذا ركضت mainfunc(X=X,y=y) أو mainfunc(X=X,y=y,c=2) سأحصل على النتائج التي أتوقعها. لكن ما يهمني في النهاية هو الركض mainfunc(X=X,y=y,c=i) ، أين i هو فهرس mainfunc عقدة. هل هذا شيء يمكنني القيام به؟

1 إجابة

3
افضل جواب

كما أفهمها، kwargs يعمل بشكل أساسي مثل القاموس ، وعندما تفككه **kwargs ثم تصبح مفاتيحه أسماء متغيرات تم تمريرها ويتم تمرير القيم المرتبطة كما هي. كل هذا سيحترم النطاق.

mainfunc(X=X, y=y, c=i) سوف يلقي خطأ إذا سمته في أي مكان باستثناء الداخل mainfunc بعد بداية for عقدة. في أي مكان آخر ، وهو خارج النطاق.

أعتقد أن مثال آخر من شأنه أن يساعد على فهم كيفية عمل هذا للاتصال mainfunc(X=X, y=y, a=2) . سيؤدي هذا إلى حدوث خطأ

TypeError: subfunc() got multiple values for keyword argument 'a'

عندما تحاول الطريقة الاتصال subfunc ، لأن وسيطتين لهما نفس الاسم ولكن بقيم مختلفة ، ولا يمكن حلها.

لذا ، باختصار ، هذه هي الطريقة **kwargs يعمل التوسيع في الثعبان ، ويضع في الاعتبار أيضًا النطاق.

:مؤلف
فوق
قائمة طعام