के अंदर कैच ब्लॉक का प्रयास करें क्या लैम्ब्डा फ़ंक्शन के अंदर प्रयास पकड़ ब्लॉक का उपयोग करना संभव है। मुझे एक निश्चित चर को एक पूर्णांक में परिवर्तित करने के लिए लैम्ब्डा फ़ंक्शन की आवश्यकता है, लेकिन सभी मान पूर्णांक में परिवर्तित नहीं हो पाएंगे।पाइथन कोशिश करें लैम्बडा
उत्तर
नहीं। एक पायथन लैम्ब्डा केवल एक अभिव्यक्ति हो सकता है। नामित फ़ंक्शन का उपयोग करें।
यह परिवर्तित प्रकार के लिए एक सामान्य समारोह में लिखने के लिए सुविधाजनक है:
def tryconvert(value, default, *types):
for t in types:
try:
return t(value)
except ValueError, TypeError:
continue
return default
तो फिर आप अपने लैम्ब्डा लिख सकते हैं:
lambda v: tryconvert(v, 0, int)
तुम भी tryconvert()
तो यह रिटर्न एक समारोह लिख सकता है कि मान को परिवर्तित करने के लिए लेता है;
def tryconvert(default, *types):
def convert(value):
for t in types:
try:
return t(value)
except ValueError, TypeError:
continue
return default
return convert
अब tryconvert(0, int)
रिटर्न एक समारोह, convert(value)
, कि एक मूल्य लेता है और एक पूर्णांक में बदल देता है, और 0
लौटाता है यदि ऐसा नहीं किया जा सकता है: तो आप लैम्ब्डा जरूरत नहीं है।
इस विशिष्ट उदाहरण में, आप इस प्रकार का try
ब्लॉक का उपयोग करने से बचने कर सकते हैं:
lambda s: int(s) if s.isdigit() else 0
isdigit()
string method रिटर्न सच अगर सभीs
के वर्णों में अंक हैं। अपनी जरूरत पर निर्भर करता है (। आप ऋणात्मक संख्याओं को स्वीकार करने की जरूरत है, तो आप कुछ अतिरिक्त जाँच करना होगा)
, एक और तरीके का प्रयास करें रखने के लिए हो सकता है: लैम्ब्डा fn बाहर पकड़
toint = lambda x : int(x)
strval = ['3', '']
for s in strval:
try:
print 2 + toint(s)
except ValueError:
print 2
आउटपुट:
5
2
http://stackoverflow.com/questions/7108193/frequently-repeated-try-except-in-python – squiguy
आप एक लैम्ब्डा समारोह _need_ नहीं है। बस इसके नाम पर एक नामित फ़ंक्शन का उपयोग करें –