रूबी में ब्लॉक हैं; अजगर नहीं करता है।
पायथन के कार्य हैं; रूबी नहीं करती। पायथन में, आप किसी भी फ़ंक्शन या विधि को ले सकते हैं और इसे किसी अन्य फ़ंक्शन को पास कर सकते हैं। रूबी में, सब कुछ एक विधि है, और विधियों को सीधे पारित नहीं किया जा सकता है। इसके बजाय, आपको उन्हें पास करने के लिए प्रोक में लपेटना होगा।
रूबी और पायथन दोनों बंद का समर्थन करते हैं, लेकिन अलग-अलग तरीकों से। पायथन में, आप एक फ़ंक्शन को दूसरे फ़ंक्शन के अंदर परिभाषित कर सकते हैं। आंतरिक फ़ंक्शन बाहरी फ़ंक्शन से चर तक पहुंच पढ़ता है, लेकिन पहुंच नहीं लिखता है। रूबी में, आप ब्लॉक का उपयोग करके बंद परिभाषित करते हैं। बाहरी दायरे से चरों की पहुंच पूरी तरह से है।
पायथन में लिस्ट कॉम्प्रिहेंशन हैं, जो बहुत स्पष्ट हैं। उदाहरण के लिए, यदि आपके पास संख्याओं की सूची है, तो आप लिख सकते हैं
[x*x for x in values if x > 15]
15. से अधिक सभी मानों के वर्गों की एक नई सूची प्राप्त करने के लिए, रूबी में, आपको निम्नलिखित लिखना होगा:
values.select {|v| v > 15}.map {|v| v * v}
रूबी कोड कॉम्पैक्ट के रूप में महसूस नहीं करता है। यह भी उतना कुशल नहीं है क्योंकि यह पहले मान को सरणी को एक छोटे मध्यवर्ती सरणी में परिवर्तित करता है जिसमें मान 15. से अधिक होते हैं। फिर, यह मध्यवर्ती सरणी लेता है और मध्यवर्ती के वर्गों वाले एक अंतिम सरणी उत्पन्न करता है। मध्यवर्ती सरणी फिर बाहर फेंक दी जाती है। इसलिए, रूबी गणना के दौरान स्मृति में 3 सरणियों के साथ समाप्त होता है; अजगर को केवल इनपुट सूची और परिणामी सूची की आवश्यकता होती है।
पायथन भी इसी तरह के मानचित्र समझ की आपूर्ति करता है।
अजगर टुपल्स का समर्थन करता है; रूबी नहीं रूबी में, आपको ट्यूपल्स का अनुकरण करने के लिए सरणियों का उपयोग करना होगा।
रूबी स्विच / केस स्टेटमेंट का समर्थन करती है; अजगर नहीं करता है।
रूबी मानक expr ? val1 : val2टर्नरी ऑपरेटर का समर्थन करती है ; अजगर नहीं करता है।
रूबी केवल एकल विरासत का समर्थन करती है। यदि आपको एकाधिक वंशानुक्रम की नकल करने की आवश्यकता है, तो आप मॉड्यूल को परिभाषित कर सकते हैं और मॉड्यूल विधियों को कक्षाओं में खींचने के लिए मिक्स-इन का उपयोग कर सकते हैं। पाइथन मॉड्यूल मिक्स-इन के बजाय कई विरासत का समर्थन करता है।
पायथन केवल सिंगल-लाइन लैम्बडा फ़ंक्शन का समर्थन करता है। रूबी ब्लॉक, जो कि प्रकार / लंबोदर फ़ंक्शन हैं, मनमाने ढंग से बड़े हो सकते हैं। इस वजह से, रूबी कोड आमतौर पर पायथन कोड की तुलना में अधिक कार्यात्मक शैली में लिखा गया है। उदाहरण के लिए, रूबी में एक सूची पर लूप करने के लिए, आप आमतौर पर करते हैं
collection.each do |value|
...
end
ब्लॉक बहुत काम करता है जैसे एक फ़ंक्शन को पारित किया जा रहा है collection.each। यदि आप पायथन में एक ही काम करते हैं, तो आपको एक नामित आंतरिक फ़ंक्शन को परिभाषित करना होगा और फिर संग्रह को प्रत्येक विधि (यदि सूची ने इस विधि का समर्थन किया है) को पास करना होगा:
def some_operation(value):
...
collection.each(some_operation)
यह बहुत अच्छी तरह से प्रवाह नहीं करता है। तो, आमतौर पर पायथन में निम्नलिखित गैर-कार्यात्मक दृष्टिकोण का उपयोग किया जाएगा:
for value in collection:
...
संसाधनों का सुरक्षित तरीके से उपयोग करना दोनों भाषाओं के बीच काफी भिन्न है। यहां, समस्या यह है कि आप कुछ संसाधन आवंटित करना चाहते हैं (एक फ़ाइल खोलें, डेटाबेस कर्सर प्राप्त करें, आदि), उस पर कुछ मनमाना संचालन करें, और फिर अपवाद होने पर भी इसे सुरक्षित तरीके से बंद करें।
रूबी में, क्योंकि ब्लॉक का उपयोग करना इतना आसान है (# 9 देखें), आप आमतौर पर इस पैटर्न को एक विधि के रूप में कोड करेंगे जो संसाधन पर मनमाने संचालन के लिए ब्लॉक लेता है।
पायथन में, मनमाने ढंग से कार्रवाई के लिए एक समारोह में गुजरना थोड़ा अव्यवस्थित है क्योंकि आपको एक नामित, आंतरिक फ़ंक्शन (# 9 देखें) लिखना है। इसके बजाय, पायथन withसुरक्षित संसाधन हैंडलिंग के लिए एक बयान का उपयोग करता है । देखें कि मैं पायथन ऑब्जेक्ट को सही ढंग से कैसे साफ करूं? अधिक जानकारी के लिए।