ما هي أفضل طريقة لإرجاع قيم متعددة من دالة في بايثون؟

StackOverflow https://stackoverflow.com/questions/38508

  •  09-06-2019
  •  | 
  •  

سؤال

لدي وظيفة حيث أحتاج إلى القيام بشيء ما لسلسلة.أحتاج إلى الدالة لإرجاع قيمة منطقية تشير إلى نجاح العملية أم لا، كما أحتاج أيضًا إلى إرجاع السلسلة المعدلة.

في C#، سأستخدم معلمة out للسلسلة، ولكن لا يوجد ما يعادلها في Python.ما زلت جديدًا جدًا على لغة بايثون والشيء الوحيد الذي يمكنني التفكير فيه هو إرجاع صف يحتوي على سلسلة منطقية ومعدلة.

سؤال ذو صلة: هل من لغة بايثونية أن تقوم الدالة بإرجاع قيم متعددة؟

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

المحلول

def f(in_str):
    out_str = in_str.upper()
    return True, out_str # Creates tuple automatically

succeeded, b = f("a") # Automatic tuple unpacking

نصائح أخرى

لماذا لا يتم طرح استثناء إذا لم تكن العملية ناجحة؟أنا شخصياً أميل إلى الرأي القائل بأنه إذا كنت بحاجة إلى إرجاع أكثر من قيمة واحدة من دالة، فيجب عليك إعادة النظر فيما إذا كنت تفعل الأشياء بالطريقة الصحيحة أو تستخدم كائنًا ما.

ولكن بشكل مباشر أكثر، إذا قمت باستثناء، فإنك تجبرهم على التعامل مع المشكلة.إذا حاولت إرجاع قيمة تشير إلى الفشل، فمن المحتمل جدًا أن لا يتمكن شخص ما من التحقق من القيمة وينتهي الأمر ببعض الأخطاء التي قد يصعب تصحيحها.

إرجاع صف.

def f(x):
    # do stuff
    return (True, modified_string)

success, modified_string = f(something)

إن إرجاع الصف هو الطريقة المعتادة للقيام بذلك في بايثون.

يعد طرح استثناء للفشل إحدى الطرق الجيدة للمضي قدمًا، وإذا كنت تقوم بإرجاع الكثير من القيم المختلفة، فيمكنك إرجاع صف.بالنسبة للحالة المحددة التي تستشهد بها، غالبًا ما أتبع نهجًا متوسطًا:قم بإرجاع السلسلة المعدلة عند النجاح، وإرجاع لا شيء عند الفشل.أنا مبرمج C غير مُعاد بناؤه لأريد إرجاع مؤشر NULL للحرف عند الفشل.

إذا كنت أكتب روتينًا ليتم استخدامه كجزء من مكتبة أكبر ويستهلكه مطورون آخرون، فسوف أقوم باستثناء الفشل.عندما أتناول طعامي الخاص، ربما سأعيد أنواعًا مختلفة وأجري اختبارًا عند العودة.

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