Calling Cython C functions from Python -


मेरे पास foo.pyx नामक एक फाइल है जिसमें निम्नलिखित कार्य हैं:

  def add_one (int n): cdef int m = n + 1 वापसी m cdef int c_add_one (int n): वापसी n + 1  

मैं यह pyx फ़ाइल का उपयोग करके cython -a foo.pyx और उसके बाद कर सकते हैं:

  & gt; & gt; & gt; आयात फू & gt; & gt; & gt; Foo.add_one (5) 6> gt; & gt; Foo.c_add_one (5) एट्रिब्यूट त्रुटि: 'मॉड्यूल' ऑब्जेक्ट में कोई विशेषता 'c_add_one' नहीं है  

ऐसा लगता है कि मैं अजगर से c_add_one कॉल नहीं कर सकता cdef

  1. का उपयोग करके फ़ंक्शन घोषित करने के क्या फायदे हैं? स्पीड : सिथन और सी cdef और cpdef फ़ंक्शन नियमित फ़ंक्शन से अधिक तेज़ कर सकते हैं। नियमित डीएफ़ फ़ंक्शंस पूर्ण-पूर्ण पायथन ऑब्जेक्ट्स हैं। उन्हें संदर्भ गणना, जीआईएल, आदि की आवश्यकता होती है।
  2. इनकैप्सुलेशन : यदि किसी फ़ंक्शन को cdef घोषित किया गया है, तो इसे पायथन उपयोगकर्ता के सामने नहीं भेजा जाएगा। यह फायदेमंद है यदि फ़ंक्शन का उपयोग सार्वजनिक उपभोग के लिए कभी नहीं किया गया था (उदा। क्योंकि यह उसके मापदंडों की जांच नहीं करता है, या किसी कार्यान्वयन के विवरण से संबंधित है जो कि भविष्य में बदल सकता है)। उपयोगकर्ता अभी भी सी / सिथन के माध्यम से इस पर बाधक बना सकते हैं, लेकिन ऐसा करने से अधिक परेशानियों की अपेक्षा अधिक से अधिक परेशान होगा। इस तरह, यह डबल-अंडरस्कोर नाम मैंकलिंग के समान है।

Comments

Popular posts from this blog

apache - 504 Gateway Time-out The server didn't respond in time. How to fix it? -

c# - .net WebSocket: CloseOutputAsync vs CloseAsync -

c++ - How to properly scale qgroupbox title with stylesheet for high resolution display? -