Python - C Uzantıları

İçindekiler

dili programlama C Uzun yıllardır yazılım geliştiricilerin kullanımına sunulmuştur, derlenmiş bir dil olduğundan programları çok daha optimal ve daha hızlı hale getirebiliriz, bu dil sayesinde farklı işlem türlerinin hızlı bir şekilde gerçekleştirilmesine izin verdiği için bu dil hala yürürlüktedir.

İçinde piton Okunabilir ve dostane bir şekilde geliştirme gücü, küçük bir bedelle gelir, bu da bazı çok özel süreçlerde performans kaybedilebilir, bu nedenle bu kayıp kabul edilebilir değilse ve programımızı riske atıyorsa, alternatifler aramalıyız. Esnekliği, C gibi diğer dillerde yapılmış modülleri dahil etmemizi sağlar.

C'de uzantı yazma
yazmak C uzantıları yapmak kadar şeffaf değil C # veya içinde JAVA farklı Python uygulamalarıyla bunu çok hızlı ve kolay hale getiriyoruz, C ile bir API çok katı, ancak bu zorluklar bu süreci iyileştirmeye çalışan araçlara yol açtı, bunlardan biri İÇERİK.

İÇERİK için bir kısaltmadır Basit Sarıcı ve Arayüz Oluşturucu C veya C++'da uzantılar geliştirmemize ve daha sonra bunları aşağıdaki gibi üst düzey dillerde kullanım için paketlememize izin veren bir araçtır. piton, Perl, yakut ve diğerleri.

SWIG ne yapar?
Kullanmak SWIG Sadece birkaç basit adımı yerine getirmemiz gerekiyor, şimdi neye ihtiyacımız olduğunu görelim:

  • C kodumuz için bir arayüz yazmamız gerekiyor, bu dosya türü şuna çok benziyor: başlıklar; bazı durumlarda başlık dosyasını doğrudan kullanabilirsiniz.
  • Koşuyoruz İÇERİK arabirim dosyasında bu, C'de, yani sarmalayıcıda daha fazla kod üretilmesine neden olur.
  • Dosyayı derliyoruz arayüz ile uyumlu dillerle kullanabileceğimiz ortak bir kütüphane oluşturduğumuz paketleyici ile birlikte SWIG.

biraz pratik
Biraz teoride ustalaştıktan sonra, şimdi bunun açıkladığımız bir örneğini görelim, bir dizenin palindrom olup olmadığını, yani her iki yönde de aynı şekilde okunduğunu algılayan bir modül yapacağız, bu için bir sorunu temsil ettiği için değil pitonAncak gerçekten büyük stringler olduklarında performans sorunu fark edilebiliyor, önce aşağıdaki görseldeki kodu görelim ve sonra nasıl olduğunu görelim. SWIG kullanarak uygulayın:

Burada, bir dizgenin palindrom olup olmadığını bilmek için C'deki uygulamaya sahibiz, sonra aşağıdaki kod olan arayüzü oluşturuyoruz:

C-seviyesi gereksinimlerin tamamına sahip olduğumuz için, şimdilik ne yapmamız gerektiğini göreceğiz. SWIG bunu kullanabilmek için:

Öncelikle aşağıdaki komutu çalıştırmalıyız:

 $ swig -python palindrome.i
Neresi palindrom.i bizim arayüzümüzdür. Bu dosyaları üretecek piton gerekliyse, o zaman her şeyi derlemeliyiz, bu adım için doğru referansları yapabilmek için elementlerimizin yollarını çok iyi bilmeliyiz:
 gcc -c palindrome.c gcc -I $ PYTHON_HOME -I $ PYTHON_HOME / Dahil et -c palindrome_wrap.c gcc -shared palindrome.o palindrome_wrap.o -o _palindrome.so 
Bu adımlardan sonra yeni kütüphanemizi kullanabiliriz. piton aşağıdaki gibi:
 >>> _palindrome'u içe aktar >>> dir (_palindrome) ['__doc__', '__file__', '__name__', 'is_palindrome'] >>> _palindrome.is_palindrome ('ipreferpi') 1 >>> _palindrome.is_palindrome ('notlob) ') 0 
Bununla öğreticiyi bitiriyoruz, gördüğümüz gibi biraz karmaşık uzantıları C'de uygula ancak elde edilen performans buna değer.

Bu Eğitimi beğendiniz ve yardım ettiniz mi?Yazara olumlu puan vermek için bu düğmeye basarak yazarı ödüllendirebilirsiniz.

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave