मैं पायथन 3 के साथ सीएमपी (ए, बी) का उपयोग कैसे कर सकता हूं?


16

मुझे बताया गया था कि cmpफ़ंक्शन का उपयोग कोड-गोल्फ में बहुत उपयोगी हो सकता है । लेकिन दुर्भाग्य से, पायथन 3 में एक cmpफ़ंक्शन नहीं है ।

तो क्या cmpअजगर 3 में काम करने वाला सबसे छोटा समकक्ष है ?


3
आपको स्पष्ट करना चाहिए कि आप cmpगोल्फिंग के संदर्भ में एक विकल्प की तलाश कर रहे हैं । अन्यथा, यह एक सामान्य प्रोग्रामिंग प्रश्न के रूप में बहुत जल्दी बंद हो सकता है।
मार्टिन एंडर

@ MartinBüttner मुझे लगता है कि यह ओपी के गोल्फ सलाह सवाल के संदर्भ में है, जहां एक उत्तर का उपयोग किया गया है,cmp हालांकि प्रश्न 3 पायथन के लिए पूछा गया है
xnor

@xnor मुझे पता है कि यह है, लेकिन अन्य नहीं हो सकता है।
मार्टिन एंडर

यदि यह जानना उपयोगी है, तो आप cmp(a,b)पाइथन 2 में उपयोग कर सकते हैं
mbomb007

जवाबों:


34

अजगर 3 के पास नहीं है cmp। गोल्फ के लिए, आप कर सकते हैं

11 वर्ण

(a>b)-(a<b)

जो 3 चरों को खो देता है cmp(a,b)

आश्चर्यजनक रूप से, यह "आधिकारिक" वर्कअराउंड भी है। क्या अजगर में 3 नया क्या है "(तुम सच में की जरूरत है पेज का कहना है cmp()कार्यक्षमता, आप अभिव्यक्ति इस्तेमाल कर सकते हैं (a > b) - (a < b)के लिए बराबर के रूप में cmp(a, b)।)"


15
पूर्ववर्ती समस्याओं से सावधान रहें! cmp (a, b) का वास्तविक समतुल्य है ((a> b) - (a <b))
Spear

यदि a या b अधिक जटिल अभिव्यक्तियाँ हैं - बहुत लंबे समय तक चलने वाले कार्यों के लिए कॉल करें, तो यह आपके चलने के समय के लिए बहुत बुरा है। इससे भी बदतर, अगर एक या बी में साइड-इफ़ेक्ट वाले फ़ंक्शन में कॉल होता है, तो यह आपके प्रोग्राम के शब्दार्थ को भी बदल सकता है।
अल्गोमन

1
@ ऑल्गमन ओह नो, रनिंग टाइम, कोड-गोल्फिंग / एस का सबसे महत्वपूर्ण हिस्सा। यदि आप दो बार रनिंग फंक्शन्स से बचना चाहते हैं, तो बस उन्हें पहले से वेरिएबल्स में असाइन करें (जो कि आप शायद बाइट्स को बचाने के लिए वैसे भी खत्म करने जा रहे हैं )
जो किंग

मैं एक ट्रांसपिलर पर काम कर रहा हूं - यह एक अभिव्यक्ति पढ़ता है और इसे से एक अभिव्यक्ति उत्पन्न करने वाला है। मूल अभिव्यक्ति में उस cmp को गहराई से घोंसला बनाया जा सकता है। इसे लागू करने के लिए बहुत ही बदसूरत और कठिन (यदि असंभव नहीं है) लागू करना होगा, अगर मैं इस तरह का लक्ष्य-कोड उत्पन्न करता।
अल्गोमन

1
@Algoman तो cmp(exp1,exp2)साथ बदलें (lambda a,b:(a>b)-(a<b))(exp1,exp2)
एंडर्स केसरग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.