كيف يمكن تحقيق هذا السلوك؟ بيثون "الدائرة القصيرة" اختبار

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

  •  06-07-2019
  •  | 
  •  

سؤال

ولدي البرمجية التالية:

def testGeodatabase(self):
    geodatabaseList = self.gp.ListWorkspaces("*","ALL")
    for x in geodatabaseList:
        if x == self.outputGeodatabase:
            return True
        else:
            pass
    return False

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

def testGeodatabase(self):
    geodatabaseList = self.gp.ListWorkspaces("*","ALL")
    for x in geodatabaseList:
        if x == self.outputGeodatabase:
            return True
            break
        else:
            pass
    return False

إذا لم البرمجية التالية حل مشكلتي، ما الذي يمكنني استخدامها للقيام محاكاة هذا السلوك؟

والشكر

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

المحلول

وreturn هو نهاية السطر، وأي شيء آخر سوف يحدث في تلك الوظيفة بعد ذلك. من ناحية أخرى، هل يمكن كتابة الدالة ك

def testGeodatabase(self):
    return self.outputGeodatabase in self.gp.ListWorkspaces("*","ALL")

نصائح أخرى

وأنت لا تحتاج الكلمة فاصل في رمز أعلاه. في الواقع، لا تحتاج ل

else:
   pass

وإما. و

return True

وسيتم إنهاء الدالة.

والبيان return سيتسبب في الواقع وظيفة لأن خرجت في تلك المرحلة. يتم تنفيذ أي رمز آخر في وظيفة.

وهنا هو اختبار بسيط الذي يمكن تشغيله لإثبات هذه النقطة:

def someFunction(nums):
    for i in nums:
        if i == 1:
            return "Found 1!"
    return "Never found 1"

وتشغيله:

>>> someFunction([2])  
'Never found 1'  
>>> someFunction([2,1,3])  
'Found 1!'  

وأعتقد أن استخدام any() هو الخيار الأفضل:

def testGeodatabase(self):
    geodatabaseList = self.gp.ListWorkspaces("*","ALL")
    return any(x == self.outputGeodatabase for x in geodatabaseList)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top