कभी-कभी एक सोचा प्रयोग उपयोगी हो सकता है।
- व्यवहार A:
int('1.23')एक त्रुटि के साथ विफल रहता है। यह मौजूदा व्यवहार है।
- व्यवहार बी: त्रुटि के बिना
int('1.23')पैदा करता है 1। यह वही है जो आप प्रस्तावित कर रहे हैं।
व्यवहार A के साथ, यह व्यवहार B के प्रभाव को प्राप्त करने के लिए सीधा और तुच्छ है: int(float('1.23'))इसके बजाय का उपयोग करें ।
दूसरी ओर, व्यवहार बी के साथ, व्यवहार ए का प्रभाव प्राप्त करना काफी अधिक जटिल है:
def parse_pure_int(s):
if "." in s:
raise ValueError("invalid literal for integer with base 10: " + s)
return int(s)
(और यहां तक कि ऊपर दिए गए कोड के साथ, मुझे पूरा भरोसा नहीं है कि कुछ कोने का मामला नहीं है कि यह गलतफहमी है।)
व्यवहार A इसलिए व्यवहार B से अधिक अभिव्यंजक है।
एक और बात पर विचार करें: '1.23'एक फ्लोटिंग-पॉइंट वैल्यू का एक स्ट्रिंग प्रतिनिधित्व है। परिवर्तित '1.23'एक पूर्णांक के लिए धारणात्मक दो रूपांतरण (पूर्णांक के लिए नाव के लिए स्ट्रिंग) शामिल है, लेकिन int(1.23)और int('1')प्रत्येक केवल एक रूपांतरण शामिल है।
संपादित करें:
और वास्तव में, कोने के मामले हैं जो उपरोक्त कोड नहीं संभालेंगे: 1e-2और 1E-2दोनों अस्थायी बिंदु मान भी हैं।
type(3)लौटता है<type int>। हालांकि, अजगर शिकायत नहीं करता हैfloat("3")। क्या अजगर अंतर्निहित रूप से स्ट्रिंग को इंट में परिवर्तित नहीं कर रहा है और फिर फ्लोट में?