मैं अपने खुद के ऑपरेटर को परिभाषित करना चाहूंगा। क्या अजगर ऐसी बात का समर्थन करता है?
जवाबों:
जबकि तकनीकी रूप से आप पायथन में नए ऑपरेटरों को परिभाषित नहीं कर सकते हैं, यह स्मार्ट हैक इस सीमा के आसपास काम करता है। यह आपको infix ऑपरेटरों को इस तरह परिभाषित करने की अनुमति देता है:
# 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
pipe
से toolz
। pip = Infix(lambda x,y: pipe(x,y))
। तब 8 |pip| range |pip| sum |pip| range
। काम करने लगता है।
नहीं, पायथन एक पूर्वनिर्धारित, फिर भी अधिक टिकाऊ, ऑपरेटरों के सेट के साथ आता है ।
dfply
एक -->
ऑपरेटर का उपयोग कैसे किया जाता है : aboutdatascience.com/-
-->
करने वाला उदाहरण psuedocode लगता है। पुस्तकालय में केवल अधिभार होता है >>
।
ऋषि इस कार्यक्षमता प्रदान करता है, अनिवार्य रूप से @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
देखें साधु प्रलेखन और इस वृद्धि पर नज़र रखने के टिकट अधिक जानकारी के लिए।
यदि आप ऑब्जेक्ट के किसी विशेष वर्ग पर ऑपरेशन को लागू करने का इरादा रखते हैं, तो आप बस ऑपरेटर को ओवरराइड कर सकते हैं जो आपके फ़ंक्शन को निकटतम से मेल खाता है ... उदाहरण के लिए, ओवरराइडिंग ऑपरेटर को __eq__()
ओवरराइड करेगा ==
जो आप चाहते हैं। यह लगभग सभी ऑपरेटरों के लिए काम करता है।
पायथन 3.5 @
एक अतिरिक्त ऑपरेटर के लिए प्रतीक का परिचय देता है ।
PEP465 ने कई गुणा कोड के अंकन को सरल बनाने के लिए, मैट्रिक्स गुणन के लिए इस नए ऑपरेटर को पेश किया। ऑपरेटर को सभी प्रकारों के लिए लागू नहीं किया जाएगा, लेकिन सिर्फ सरणियों जैसी वस्तुओं के लिए।
आप लागू करके अपनी कक्षाओं / वस्तुओं के लिए ऑपरेटर का समर्थन कर सकते हैं __matmul__()
।
पीईपी गैर-सरणियों जैसी वस्तुओं के लिए ऑपरेटर के एक अलग उपयोग के लिए जगह छोड़ देता है।
बेशक आप @
किसी भी प्रकार के ऑपरेशन के साथ लागू कर सकते हैं मैट्रिक्स गुणा से अलग भी ऐरसे जैसी वस्तुओं के लिए, लेकिन उपयोगकर्ता अनुभव प्रभावित होगा, क्योंकि हर कोई आपके डेटा प्रकार से अलग तरीके से व्यवहार करने की उम्मीद करेगा।
@
एक नया ऑपरेटर प्रतीक है? या कि हम किसी तरह इसका इस्तेमाल अपने खुद के नए ऑपरेटरों को परिभाषित करने के लिए कर सकते हैं?
@
एक नया ऑपरेटर है । बस। तथ्य अभी भी बना हुआ है: आप पायथन में अपने स्वयं के ऑपरेटरों को परिभाषित नहीं कर सकते।
$
) और फिर खुद को (साथopen
) संपादित करने और सभीa $ b
को बदलने के लिए कुछ अजगर कोड का उपयोग करेंfunction(a,b)