विभाजन के लिए उपयोग किए जाने पर '/' और '//' के बीच क्या अंतर है?


473

क्या एक दूसरे के ऊपर प्रयोग करने का कोई लाभ है? पायथन 2 में, वे दोनों एक ही परिणाम लौटाते हैं:

>>> 6/3
2
>>> 6//3
2

1
पूर्णांक विभाजन करने के लिए ऑपरेटर को शुरू करने के कारण के लिए कृपया समस्या को पूर्णांक विभाग के साथ देखें //
श्रीराम

जवाबों:


649

पायथन 3.x में, 5 / 2वापस आ जाएगा 2.5और 5 // 2वापस आ जाएगा 2। पूर्व फ्लोटिंग पॉइंट डिवीजन है, और बाद वाला फ़्लोर डिवीज़न है , जिसे कभी-कभी पूर्णांक विभाजन भी कहा जाता है ।

पायथन 2.2 में या बाद में 2.x लाइन में, पूर्णांक के लिए कोई अंतर नहीं है जब तक कि आप एक प्रदर्शन नहीं करते हैं from __future__ import division, जो 3.x व्यवहार को अपनाने के लिए पायथन 2.x का कारण बनता है।

भविष्य के आयात के बावजूद, ऑपरेशन के फर्श विभाजन परिणाम के बाद से 5.0 // 2वापस आ जाएगा 2.0

आप विस्तृत विवरण https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator पर पा सकते हैं


संपादित: आप पायथन 2.2 से विभाजन को "ठीक" कर सकते हैं! (अभी पढ़े हुए PEP को पढ़ें)
u0b34a0f6ae

2
भी python -Qnew। अन्य विभाजन विकल्प: -Qold(डिफ़ॉल्ट) -Qwarn,-Qwarnall
जॉन ला रोय नोव

2
सभी संस्करणों में 5.0 / 2रिटर्न की ओर इशारा करते हुए 2.5, जैसा कि करता है 5 / 2.0- पुराने व्यवहार केवल भिन्न होते हैं जब दोनों ऑपरेंड होते हैं int
क्रिस

2
जब संख्याएँ नकारात्मक हों तो क्या होगा? क्या नकारात्मक पूर्णांक के लिए व्यवहार समान है?
एरोन फ्रेंके

1
@ श्रीनिवासु आपका उदाहरण सहायक नहीं है। बेहतर होगा 5 // 2 (जो 2 उपज देता है) और -5 // 2 (जो उपज -3)।
मार्विन

67

अजगर 2.x स्पष्टीकरण:

पायथन 2.x लाइन के लिए स्पष्ट करने के लिए, /न तो फर्श विभाजन है और न ही सच विभाजन है। इस पर वर्तमान स्वीकृत उत्तर स्पष्ट नहीं है।

/फर्श विभाजन तब होता है जब दोनों आर्ग होते हैं int, लेकिन यह सही विभाजन है जब या तो दोनों आर्ग होते हैंfloat

उपरोक्त अधिक सत्य बताता है, और स्वीकृत उत्तर में दूसरे पैराग्राफ से अधिक स्पष्ट है।


33

//आपके प्रकार की परवाह किए बिना "फर्श विभाजन" को लागू करता है। तो 1.0/2.0दे देंगे 0.5, लेकिन दोनों देंगे 1/2, 1//2और 1.0//2.0देंगे0

देखें https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator जानकारी के लिए


यह एक अच्छा जवाब है। PEP लिंक सहायक है। इसके अलावा, उपयोग करने पर विचार करें math.floor()या math.fmod()यदि आप यह सुनिश्चित नहीं कर रहे हैं कि यूनिरी ऑपरेटरों के साथ क्या हो रहा है।
स्कॉट लोव्रे

/और //बाय-नैरी ऑपरेटर (दो ऑपरेंड, बाएं और दाएं, अंश और हर)
आयनो जूल

28

/ -> फ्लोटिंग पॉइंट डिवीजन

// -> मंजिल विभाजन

कुछ उदाहरणों को अजगर 2.7 और पायथन 3.5 दोनों में देखें।

पायथन 2.7.10 बनाम पायथन 3.5

print (2/3)  ----> 0                   Python 2.7
print (2/3)  ----> 0.6666666666666666  Python 3.5

पायथन 2.7.10 बनाम पायथन 3.5

  print (4/2)  ----> 2         Python 2.7
  print (4/2)  ----> 2.0       Python 3.5

अब यदि आप अजगर 3.5 में समान आउटपुट (अजगर 2.7) में चाहते हैं, तो आप निम्न कार्य कर सकते हैं:

पायथन 2.7.10

from __future__ import division
print (2/3)  ----> 0.6666666666666666   #Python 2.7
print (4/2)  ----> 2.0                  #Python 2.7

जहां दोनों पायथन 2.7 और पायथन 3.5 में फ्लोर डिवीजन के बीच कोई अंतर नहीं है

138.93//3 ---> 46.0        #Python 2.7
138.93//3 ---> 46.0        #Python 3.5
4//3      ---> 1           #Python 2.7
4//3      ---> 1           #Python 3.5

क्या यह int (5/2) के समान है?
पाइरेटऐप

जब संख्याएँ नकारात्मक हों तो क्या होगा? क्या नकारात्मक पूर्णांक के लिए व्यवहार समान है?
एरॉन फ्रेंक

1
पुन: नकारात्मक - व्यवहार एक ही है, लेकिन याद रखें कि परिणाम मंजिल है, इसलिए गोलाई हमेशा अधिक नकारात्मक की ओर नीचे है । कुछ उदाहरण: => -4 ; => -4 ; लेकिन फर्श की फंकिंग की गोलाई दिशा के कारण, पिछले वाले की तुलना में अगला काउंटर-सहज लग सकता है: => 3-100 // 33100 // -33-100 // -33
Erd ats-Bacon

22

जैसा कि सभी ने पहले ही उत्तर दिया है, //मंजिल विभाजन है।

यह महत्वपूर्ण क्यों है कि //2.2 से सभी पायथन संस्करणों में, unthiguously फर्श विभाजन है, जिसमें पायथन 3.x संस्करण शामिल हैं।

के /आधार पर बदल सकता है का व्यवहार :

  • सक्रिय __future__आयात या नहीं (मॉड्यूल-स्थानीय)
  • अजगर आदेश पंक्ति विकल्प हैं, या तो -Q oldया-Q new


5

अजगर 2.7 और अजगर के अन्य आगामी संस्करण:

  • विभाग ( /)

दाएं हाथ के ऑपरेंड से बाएं हाथ का ऑपरेशन

उदाहरण: 4 / 2 = 2

  • मंजिल प्रभाग ( //)

परिचालनों का वह भाग जहाँ परिणाम वह भागफल होता है जिसमें दशमलव बिंदु के बाद के अंक हटा दिए जाते हैं। लेकिन यदि किसी एक ऑपरेंड नकारात्मक है, तो परिणाम शून्य हो जाता है, अर्थात शून्य से दूर (नकारात्मक अनंत की ओर):

उदाहरण: 9//2 = 4और 9.0//2.0 = 4.0, -11//3 = -4,-11.0//3 = -4.0

/डिवीजन और //फ्लोर डिवीजन ऑपरेटर दोनों समान फैशन में काम कर रहे हैं।


2
अनंत की ओर और शून्य से अलग चीजें अलग हैं। उदाहरण के लिए (-1.2 और 3.4): "फर्श" नकारात्मक अनंत (-2 और 3) की ओर है, "छंटाई" शून्य (-1 और 3) की ओर है, "संतृप्त" शून्य (-2 और 4) से दूर है, और "छत" सकारात्मक अनंत (-1 और 4) की ओर है।
फर्नोस्ट


3

//मंजिल विभाजन है, यह आपको हमेशा परिणाम के पूर्णांक मंजिल देगा। अन्य 'नियमित' विभाजन है।


2

समीकरण का उत्तर अगले छोटे पूर्णांक पर गोल होता है या दशमलव बिंदु के रूप में .0 के साथ तैरता है।

>>>print 5//2
2
>>> print 5.0//2
2.0
>>>print 5//2.0
2.0
>>>print 5.0//2.0
2.0

2

उपरोक्त उत्तर अच्छे हैं। मैं एक और बिंदु जोड़ना चाहता हूं। कुछ मूल्यों तक दोनों का परिणाम एक ही भागफल में होता है। उसके बाद फ्लोर डिवीजन ऑपरेटर ( //) ठीक काम करता है लेकिन डिवीजन ( /) ऑपरेटर नहीं।

 - > int(755349677599789174/2)
 - > 377674838799894592      #wrong answer
 - > 755349677599789174 //2
 - > 377674838799894587      #correct answer

-1

5.0//2में परिणाम 2.0, और नहीं 2क्योंकि वापसी के प्रकार वापसी से मान// ऑपरेटर अजगर बलात्कार (प्रकार कास्टिंग) नियमों का पालन करती।

पायथन डेटा के नुकसान से बचने के लिए निचले डेटाटाइप (पूर्णांक) को उच्च डेटा प्रकार (फ्लोट) में बदलने को बढ़ावा देता है।


-1
  • // मंजिल विभाजन है, यह आपको हमेशा परिणाम का फर्श मूल्य देगा।
  • और दूसरा एक /फ्लोटिंग-पॉइंट डिवीजन है।

अनुगमन के बीच अंतर है /और //; मैंने पायथन 3.7.2 में ये अंकगणितीय ऑपरेशन चलाए हैं

>>> print (11 / 3)
3.6666666666666665

>>> print (11 // 3)
3

>>> print (11.3 / 3)
3.7666666666666667

>>> print (11.3 // 3)
3.0

2
यह उत्तर कुछ भी कैसे जोड़ता है कि अन्य विचार कवर नहीं करते हैं? या अन्य उत्तरों की तुलना में यह उत्तर किसी भी तरह से बेहतर कैसे है?
रॉरी डॉल्टन

2
निम्नलिखित एक कार्यक्रम का आउटपुट है। यह कुछ भी नहीं समझाता है।
लोर्ने
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.