मैं समझ नहीं पा रहा हूं कि पायथन में कोई sign
फंक्शन क्यों नहीं है । इसमें एक abs
बिलिन है (जिसे मैं sign
बहन मानता हूं ), लेकिन नहीं sign
।
अजगर 2.6 में एक copysign
फ़ंक्शन ( गणित में ) भी है, लेकिन कोई संकेत नहीं है। क्यों एक लिखने के लिए परेशान copysign(x,y)
जब तुम सिर्फ एक लिख सकता है sign
और उसके बाद प्राप्त copysign
सीधे से abs(x) * sign(y)
? उत्तरार्द्ध बहुत अधिक स्पष्ट होगा: x, y के चिन्ह के साथ, जबकि नकल के साथ आपको याद रखना होगा कि क्या यह x के चिन्ह के साथ y या y के चिन्ह के साथ x है!
स्पष्ट रूप से sign(x)
इससे अधिक कुछ भी प्रदान नहीं करता है cmp(x,0)
, लेकिन यह बहुत अधिक पठनीय होगा कि यह भी (और अजगर के लिए बहुत पठनीय भाषा के लिए, यह एक बड़ा प्लस होगा)।
अगर मैं एक अजगर डिजाइनर था, तो मैं दूसरा तरीका हो सकता है: कोई cmp
बिल्डिन नहीं , बल्कि एक sign
। जब आपको आवश्यकता होती है cmp(x,y)
, तो आप बस एक sign(x-y)
(या, गैर-संख्यात्मक सामान के लिए भी बेहतर कर सकते हैं , बस एक x> y - बेशक यह sorted
एक पूर्णांक तुलनित्र के बजाय एक बूलियन को स्वीकार करने की आवश्यकता होनी चाहिए )। यह भी अधिक स्पष्ट होगा: सकारात्मक जब x>y
(जबकि साथ cmp
आप सम्मेलन सकारात्मक ध्यान रखना महत्वपूर्ण है है पहला है बड़ा है, लेकिन यह दूसरी तरह के आसपास हो सकता है)। बेशक cmp
अन्य कारणों से अपने आप में समझ में आता है (जैसे कि गैर-संख्यात्मक चीजों को सॉर्ट करते समय, या यदि आप चाहते हैं कि सॉर्ट स्थिर हो, जो केवल बूलियन के साथ उपयोग करना संभव नहीं है)
तो, सवाल यह है कि पायथन डिजाइनर (नों) sign
ने भाषा से समारोह को छोड़ने का फैसला क्यों किया ? बिल्ली copysign
अपने माता-पिता के साथ क्यों परेशान होती है sign
?
क्या मैं कुछ भूल रहा हूँ?
EDIT - पीटर हैनसन की टिप्पणी के बाद। उचित है कि आपने इसका उपयोग नहीं किया, लेकिन आपने यह नहीं कहा कि आप अजगर के लिए क्या उपयोग करते हैं। 7 वर्षों में जो मैं अजगर का उपयोग करता हूं, मुझे इसकी अनगिनत बार आवश्यकता थी, और आखिरी वह तिनका है जिसने ऊंट की पीठ को तोड़ा है!
हां, आप cmp को पास कर सकते हैं, लेकिन 90% बार जब मुझे इसे पास करने की जरूरत थी, तो यह एक मुहावरे में था जैसे
lambda x,y: cmp(score(x),score(y))
कि साइन के साथ काम करना ठीक होगा।
अंत में, मुझे आशा है कि आप सहमत हैं कि sign
इससे अधिक उपयोगी होगा copysign
, इसलिए भले ही मैंने आपका विचार खरीदा हो, साइन के बजाय गणित में इसे परिभाषित करने के बारे में क्यों परेशान हो? साइन की तुलना में नकल कितना उपयोगी हो सकता है?