2016-09-16 7 views
7

उदाहरण के लिए, (v6 के साथ शुरू) सी # में मैं कह सकता हूँ:क्या सी # के बराबर पाइथन है? तथा ?? ऑपरेटरों?

mass = (vehicle?.Mass/10) ?? 150; 

वाहन के द्रव्यमान का एक दसवें करने के लिए बड़े पैमाने पर स्थापित करने के लिए अगर वहाँ एक वाहन है, लेकिन 150 अगर वाहन रिक्त है (या एक है शून्य द्रव्यमान, यदि मास संपत्ति एक शून्य प्रकार का है)।

क्या पाइथन (विशेष रूप से आयरनपीथन) में समकक्ष निर्माण है जो मैं अपने सी # ऐप के लिए स्क्रिप्ट में उपयोग कर सकता हूं?

यह विशेष रूप से उन मानों के लिए डिफ़ॉल्ट प्रदर्शित करने के लिए उपयोगी होगा जिन्हें अन्य मानों द्वारा संशोधित किया जा सकता है - उदाहरण के लिए, मेरे पास मेरी स्टारशिप के लिए स्क्रिप्ट में परिभाषित एक कवच घटक हो सकता है जो हमेशा जहाज पर उपलब्ध 10% अंतरिक्ष का उपभोग करता है यह स्थापित है, और इसके अन्य गुण स्केल भी हैं, लेकिन मैं कवच के आकार, हिट पॉइंट्स, लागत इत्यादि के लिए डिफ़ॉल्ट प्रदर्शित करना चाहता हूं ताकि आप इसे अन्य जहाज घटकों के साथ तुलना कर सकें। अन्यथा मुझे एक गठित अभिव्यक्ति लिखनी पड़ सकती है जो एक शून्य जांच या दो करता है, जैसे मुझे v6 से पहले सी # में होना था।

+0

आप जगह में एक त्रिगुट ऑपरेटर का उपयोग किया जाएगा उन –

+2

याद रखने की एक महत्वपूर्ण बात यह है कि आपको एक भाषा को अपनी विचारधाराओं के अनुरूप बनाने की कोशिश नहीं करनी चाहिए जो आपको किसी अन्य से मिली है। पाइथन के पास इस तरह की चीजों को करने का अपना तरीका है। मैं सुझाव देता हूं कि एक लाइन 'if/else' कथन में देखें। –

+0

@ पीएम 2 रिंग: सी # कोड या तो नहीं है। –

उत्तर

11

नहीं, पायथन (अभी तक) न्यूल-कोलेसिंग ऑपरेटरों नहीं है।

एक प्रस्ताव (PEP 505 – None-aware operators) इस तरह के ऑपरेटरों को जोड़ने के लिए है, लेकिन कोई आम सहमति मौजूद है मौसम या नहीं इन सब पर भाषा में जोड़ा जाना चाहिए और यदि ऐसा है तो, क्या फार्म इन ले जाएगा।

कार्यान्वयन अनुभाग से:

यह देखते हुए कि कोई भी -aware ऑपरेटरों के लिए की जरूरत संदिग्ध है और कहा ऑपरेटरों की वर्तनी लगभग आग लगाने वाला है, CPython के लिए कार्यान्वयन विवरण जब तक और हम जब तक स्थगित कर दिया जाएगा एक स्पष्ट विचार है कि प्रस्तावित ऑपरेटरों में से एक (या अधिक) को मंजूरी दे दी जाएगी।

नोट अजगर है कि वास्तव में नहीं null की एक अवधारणा है। पायथन नाम और गुण हमेशा संदर्भ कुछ, वे कभी भी null संदर्भ नहीं हैं। None पायथन में बस एक और वस्तु है, और समुदाय उस ऑब्जेक्ट को अपने ऑपरेटरों की आवश्यकता के लिए इतना खास बनाने के लिए अनिच्छुक है।

ऐसे समय जब तक यह लागू किया जाता है (अगर कभी, और IronPython कि अजगर रिलीज करने के लिए उपलब्ध नहीं हो जाता), तो आपको पायथन के conditional expression एक ही प्राप्त करने के लिए उपयोग कर सकते हैं:

mass = 150 if vehicle is None or vehicle.Mass is None else vehicle.Mass/10 
+0

हाँ, मैं ऐसा कुछ सोच रहा था; बस उम्मीद कर रहा था कि एक और संक्षिप्त तरीका होगा! मुझे आश्चर्य है कि ऑपरेटर की "वर्तनी" के बारे में इतना विवादास्पद क्या है? – ekolis

+1

@ekolis: सबसे विवादास्पद हिस्सा गीला है या 'कोई नहीं' को उस स्तर तक बढ़ाने के लिए नहीं है जहां इसे समर्पित ऑपरेटर मिलते हैं।इसके बाद पार्सिंग और प्राथमिकताएं हैं जिन पर विचार किया जाता है कि ये ऑपरेटर वास्तव में बाकी भाषा के साथ संघर्ष करेंगे। –

+0

मैं सोच रहा था कि मैं एक्सेल में "अगर" फ़ंक्शन के समान फ़ंक्शन लिख सकता हूं, लेकिन मुझे नहीं लगता कि मैं इसे ifnone (वाहन, वाहन.मास, 150) के रूप में लिख सकता हूं क्योंकि वाहन। मास का मूल्यांकन पहले किया जाना चाहिए जो वाहन को अस्वीकार कर देगा, भले ही यह कोई नहीं है, है ना? मुझे लगता है कि मैं एक लैम्ब्डा में गुजर सकता हूं लेकिन यह आपके द्वारा सुझाए गए कथन के रूप में लगभग जटिल होगा ... – ekolis

संबंधित मुद्दे