मैं अपना खुद का ऑपरेटर परिभाषित करना चाहता हूं। क्या पाइथन ऐसी चीज का समर्थन करता है?पायथन: अपने स्वयं के ऑपरेटरों को परिभाषित करना?
उत्तर
नहीं, आप नए ऑपरेटरों को नहीं बना सकते हैं। हालांकि, अगर आप केवल अभिव्यक्तियों का मूल्यांकन कर रहे हैं, तो आप स्वयं स्ट्रिंग को संसाधित कर सकते हैं और नए ऑपरेटरों के परिणामों की गणना कर सकते हैं।
पाइथन के ऑपरेटरों के पूर्वनिर्धारित ओवर्रिडेबल सेट के सेट के लिए [bellow] (http://stackoverflow.com/questions/932328/python-defining-my-own-operators#932333) देखें। – Palimondo
नहीं, पायथन एक पूर्वनिर्धारित, अभी तक अतिरंजित, set of operators के साथ आता है।
आप वस्तुओं के एक विशेष वर्ग पर कार्रवाई लागू करना चाहते हैं, तो आप सिर्फ ऑपरेटर अपने कार्य करीबी से मेल खाता है रद्द कर सकते थे, उदाहरण के लिए ... __eq__()
अधिभावी ==
ऑपरेटर को पार कर जाएगी जो चाहो वापस जाने के लिए। यह लगभग सभी ऑपरेटरों के लिए काम करता है।
तकनीकी रूप से आप पाइथन में नए ऑपरेटरों को परिभाषित नहीं कर सकते हैं, यह clever hack इस सीमा के आसपास काम करता है।
# simple multiplication
x=Infix(lambda x,y: x*y)
print 2 |x| 4
# => 8
# class checking
isa=Infix(lambda x,y: x.__class__==y.__class__)
print [1,2,3] |isa| []
print [1,2,3] <<isa>> []
# => True
+1 हैक बहुत अच्छा है, लेकिन मुझे नहीं लगता कि यह इस स्थिति में काम करेगा। – Zifre
यह एक इंटरस्टिंग हैक हो सकता है लेकिन मुझे नहीं लगता कि यह एक अच्छा समाधान है। पाइथन अपने ऑपरेटरों को बनाने की इजाजत नहीं देता है, एक अच्छा निर्णय के लिए एक डिजाइन निर्णय जो आपको बनाया गया था और इसे इसे एक समस्या के रूप में देखने और इसके आसपास के तरीकों की खोज करने के बजाय इसे स्वीकार करना चाहिए। उस भाषा के खिलाफ लड़ना एक अच्छा विचार नहीं है जिसमें आप कोड लिख रहे हैं। यदि आप वास्तव में चाहते हैं कि आपको एक अलग भाषा का उपयोग करना चाहिए। – DasIch
@DasIch मैं और असहमत नहीं हो सका। हम जानबूझकर एक भाषा चुनने के लिए स्वतंत्र नहीं हैं। दूसरी ओर, मुझे नहीं लगता कि अगर मैं संतुष्ट नहीं हूं तो मुझे किसी और के डिजाइन निर्णयों के साथ क्यों निपटना चाहिए। - वास्तव में उत्कृष्ट हैक! – ThomasH
साधु अनिवार्य रूप से "चालाक हैक" @Ayman Hourieh द्वारा वर्णित का उपयोग कर, यह सुविधा प्रदान करता है, लेकिन एक डेकोरेटर के रूप में एक मॉड्यूल में शामिल एक क्लीनर उपस्थिति और अतिरिक्त देने के लिए: यह आप इस तरह इन्फ़िक्स ऑपरेटरों को परिभाषित करने की अनुमति देता है कार्यक्षमता - आप ओवरलोड करने के लिए ऑपरेटर चुन सकते हैं और इसलिए मूल्यांकन का आदेश।
from sage.misc.decorators import infix_operator
@infix_operator('multiply')
def dot(a,b):
return a.dot_product(b)
u=vector([1,2,3])
v=vector([5,4,3])
print(u *dot* v)
# => 22
@infix_operator('or')
def plus(x,y):
return x*y
print(2 |plus| 4)
# => 6
the Sage documentation और अधिक जानकारी के लिए this enhancement tracking ticket देखें।
पायथन 3.5 अतिरिक्त ऑपरेटर के लिए @
प्रतीक प्रस्तुत करता है।
PEP465 ने कई संख्यात्मक कोड के संकेत को सरल बनाने के लिए मैट्रिक्स गुणा के लिए इस नए ऑपरेटर को पेश किया। ऑपरेटर सभी प्रकार के लिए लागू नहीं किया जाएगा, लेकिन केवल सरणी जैसी वस्तुओं के लिए।
__matmul__()
लागू करके आप अपने वर्ग/वस्तुओं के लिए ऑपरेटर का समर्थन कर सकते हैं।
पीईपी गैर-सरणी जैसी वस्तुओं के लिए ऑपरेटर के एक अलग उपयोग के लिए जगह छोड़ देता है।
बेशक आप @
के साथ मैट्रिक्स गुणा से अलग किसी भी प्रकार के ऑपरेशन को एरेज़ जैसी वस्तुओं के लिए भी कार्यान्वित कर सकते हैं, लेकिन उपयोगकर्ता का अनुभव प्रभावित होगा, क्योंकि हर कोई आपके डेटा प्रकार को अलग तरीके से व्यवहार करने की अपेक्षा करेगा।
क्या आपका मतलब यह है कि '@' एक नया ऑपरेटर प्रतीक है? या हम किसी भी तरह से इसका इस्तेमाल अपने नए ऑपरेटरों को परिभाषित करने के लिए कर सकते हैं? – Addem
हां, @ एक नया ऑपरेटर प्रतीक है। हां, आप इसका इस्तेमाल अपनी वस्तुओं पर संचालन को परिभाषित करने के लिए कर सकते हैं। पीईपी 465 पढ़ने पर विचार करें। – gg349
@Addem वह बस मतलब था कि '@' एक नया ऑपरेटर है। बस। तथ्य अभी भी बनी हुई है: आप पाइथन में अपने आप के ऑपरेटरों को परिभाषित नहीं कर सकते हैं। –
- 1. क्या आप अपने स्वयं के ऑपरेटरों को एफ # में परिभाषित कर सकते हैं?
- 2. अपने स्वयं के पढ़ने वाले मैक्रो को परिभाषित करें
- 3. अपने स्वयं के
- 4. अपने स्वयं के फ़ाइल
- 5. सी # में नए ऑपरेटरों को परिभाषित करें?
- 6. सी # में मैं अपने स्वयं के अपवाद कैसे परिभाषित करूं?
- 7. RailsAdmin - अपने स्वयं के फ़िल्टर को अनुकूलित करना
- 8. थ्रेड.स्टार्ट() को अपने स्वयं के कन्स्ट्रक्टर
- 9. गिट मूल को अपने स्वयं के
- 10. अपने स्वयं के कंटेनर वर्ग
- 11. एकाधिक ऑपरेटरों को ओवरलोड करना
- 12. अपने स्वयं के अपवाद वर्गों को परिभाषित करने के लिए सर्वोत्तम अभ्यास?
- 13. Ember.js - अपने स्वयं के मॉडल
- 14. पायथन: नाम त्रुटि: 'स्वयं' परिभाषित नहीं किया गया है
- 15. एक पूर्ण मॉड्यूल के लिए पायथन सजावट को परिभाषित करना
- 16. आईओ प्रोग्रामिंग भाषा में मैं अपने ऑपरेटरों को कैसे परिभाषित करूं?
- 17. copy.deepcopy स्वयं परिभाषित __new __() विधि
- 18. मुझे अपने डेटामैटप्लेट को कहां परिभाषित करना चाहिए?
- 19. पायथन कक्षा में स्थिरांक परिभाषित करना, वास्तव में स्वयं की जरूरत है?
- 20. ग्रहण अपने स्वयं के निर्माण आदेश जोड़ने
- 21. पायथन में एकाधिक 'इन' ऑपरेटरों?
- 22. मैं अपने स्वयं के फ़ाइल एक्सटेंशन
- 23. अपने स्वयं के प्रसारण udp पैकेट को अनदेखा कैसे करें
- 24. clojure.core.cache बस अपने स्वयं के उदाहरण
- 25. क्लोजर प्रोग्राम अपने स्वयं के MANIFEST.MF
- 26. एक चर को अपने स्वयं के अपरिभाषित मान
- 27. Procfile अपने स्वयं के कार्यशील निर्देशिका
- 28. अपने स्वयं के WHOIS सर्वर को कैसे कार्यान्वित करें?
- 29. अपने स्वयं के ऐप्स डेटा को प्रोग्रामेटिक रूप से
- 30. स्वयं का उपयोग करना * * विधि
ठीक है, आपके पास एक ऑपरेटर हो सकता है जिसे परिभाषित नहीं किया गया है (जैसे '$') और उसके बाद कुछ पायथन कोड का उपयोग स्वयं को संपादित करने के लिए करें ('ओपन' के साथ) और' $ b' 'को' फ़ंक्शन 'में बदलें (ए, बी) ' –