Python - Lanjutan Lanjut: Panduan untuk Pemula
Halo, pemrogram Python yang berhasrat! Hari ini, kita akan menyusuri sebuah perjalanan yang menarik ke atas dunia lanjutan Python. Jangan khawatir jika kamu baru mengenal pemrograman - saya akan menjadi pemandu yang bersahabat kamu, menjelaskan semua langkah demi langkah. Jadi, mari kita melompat!
Apa itu Lanjutan Python?
Sebelum kita mula, mari kita faham apa itu lanjutan Python. Bayangkan Python sebagai sebuah rakit penyedia. Ia sudah cukup berguna, tetapi kadang-kadang kamu memerlukan alat yang tidak ada di sana. Itu tempat lanjutan masuk - mereka seperti menambah alat baru ke rakit penyedia Python kamu.
Prasyarat untuk Menulis Lanjutan
Sekarang, saya tahu kamu tidak sabar untuk mula, tetapi ada beberapa hal yang kita perlu untuk menyiapkan dahulu. Ia seperti mempersiapkan dapur kamu sebelum memasak makanan klasik. Ini yang kamu butuhkan:
- Python terpasang di atas komputer kamu
- Sebuah pengkompiler C (seperti GCC di atas Linux atau Visual Studio di atas Windows)
- Headers dan pustaka pengembangan Python
Jangan khawatir jika ini terdengar rumit. Kebanyakan pemasangan Python datang dengan apa yang kamu butuhkan, dan saya akan menjalinkan kamu melalui pengaturan tambahan.
Pandangan Pertama pada Lanjutan Python
Mari kita mula dengan contoh yang sederhana. Bayangkan jika kita ingin membuat fungsi yang menambah dua angka, tetapi ingin itu super-cepat. Kita dapat menulis ini dalam C dan menggunakannya di atas Python. Ini adalah seperti apa yang mungkin akan tampak:
#include <Python.h>
static PyObject* add_numbers(PyObject* self, PyObject* args) {
int a, b;
if (!PyArg_ParseTuple(args, "ii", &a, &b)) {
return NULL;
}
return Py_BuildValue("i", a + b);
}
static PyMethodDef MyMethods[] = {
{"add", add_numbers, METH_VARARGS, "Add two numbers."},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef mymodule = {
PyModuleDef_HEAD_INIT,
"mymodule",
"A simple module that adds numbers",
-1,
MyMethods
};
PyMODINIT_FUNC PyInit_mymodule(void) {
return PyModule_Create(&mymodule);
}
Jangan panik jika ini terlihat seperti sup anjing saat ini. Kita akan memecahkan ia potong demi potong.
Berkas Header Python.h
Baris pertama kode kita adalah:
#include <Python.h>
Ini adalah seperti memberitahu program C kita, "Hei, kita akan bekerja dengan Python di sini!" Ini menyertakan semua definisi dan fungsi yang kita butuhkan untuk membuat lanjutan Python.
Fungsi C
Berikutnya, kita memiliki fungsi C kita yang sebenarnya:
static PyObject* add_numbers(PyObject* self, PyObject* args) {
int a, b;
if (!PyArg_ParseTuple(args, "ii", &a, &b)) {
return NULL;
}
return Py_BuildValue("i", a + b);
}
Fungsi ini mengambil dua objek Python sebagai input, menguraikan dua integer dari mereka, menambah mereka bersama-sama, dan mengembalikan hasilnya sebagai objek Python. Ia seperti penerjemah antara C dan Python.
Tabel Pemetaan Metode
static PyMethodDef MyMethods[] = {
{"add", add_numbers, METH_VARARGS, "Add two numbers."},
{NULL, NULL, 0, NULL}
};
Tabel ini adalah seperti menu untuk modul Python kita. Ini memberitahu Python, "Ini adalah fungsi yang tersedia di modul ini." Dalam kasus ini, kita menawarkan satu fungsi yang dipanggil "add".
Fungsi Inisialisasi
PyMODINIT_FUNC PyInit_mymodule(void) {
return PyModule_Create(&mymodule);
}
Fungsi ini dipanggil saat Python mengimpor modul kita. Ia seperti pembukaan besar untuk toko baru - mengatur semua hal dan membuat modul kita siap untuk digunakan.
Membangun dan Menginstal Lanjutan
Sekarang bahwa kita telah menulis lanjutannya, kita perlu untuk membangunnya. Proses ini mengubah kode C kita menjadi sesuatu yang Python dapat gunakan. Ia seperti memanggang kue - kita telah mencampurkan bahan-bahan, sekarang kita perlu untuk meletakkannya di atas kompor.
Kita biasanya menggunakan berkas setup.py
untuk ini:
from distutils.core import setup, Extension
module = Extension('mymodule', sources = ['mymodule.c'])
setup(name = 'MyModule',
version = '1.0',
description = 'This is a demo package',
ext_modules = [module])
Untuk membangun lanjutan, kamu akan menjalankan:
python setup.py build
Mengimpor Lanjutan
Setelah dibangun, kamu dapat menggunakan modul baru kamu seperti mana-mana modul Python lainnya:
import mymodule
result = mymodule.add(5, 3)
print(result) # Outputs: 8
Adakah yang keren? Kamu baru saja menggunakan fungsi C di atas Python!
Mengirimkan Parameter Fungsi
Mari kita bicarakan sedikit tentang bagaimana kita mengirimkan parameter dari Python ke C. Ingat baris ini?
if (!PyArg_ParseTuple(args, "ii", &a, &b))
Fungsi PyArg_ParseTuple
Fungsi ini adalah kunci untuk memahami bagaimana parameter dikirim. Ia seperti petugas imigrasi, memeriksa dan memproses semua yang datang ke fungsi C kita dari Python.
"ii" di atas fungsi menjelaskan bahwa dia mengharapkan dua integer. Jika kamu ingin mengirim sebuah string dan sebuah pecahan, kamu akan menggunakan "sf" sebagai ganti. Ini adalah tabel ringkasan penanda format:
Penanda Format | Tipe Python | Tipe C |
---|---|---|
i | int | int |
l | long | long |
f | float | float |
d | float | double |
s | str | char* |
O | any object | PyObject* |
Mengembalikan Nilai
Seperti kita perlu memperlakukan data yang masuk dengan hati-hati, kita juga perlu untuk mengemas nilai kembali kita dengan baik.
Fungsi Py_BuildValue
Fungsi ini adalah seperti pengepack hadiah untuk nilai C kita, membuat mereka cantik untuk Python menerima. Ini bagaimana ia bekerja:
return Py_BuildValue("i", a + b);
"I" menjelaskan Py_BuildValue untuk membuat objek integer. Jika kita ingin mengembalikan sebuah string, kita akan menggunakan "s" sebagai ganti.
Dan itu saja! Kamu baru saja mengambil langkah pertama kamu ke atas dunia lanjutan Python. Ingat, latihan membuat perfect. Cobalah menulis lanjutan kamu sendiri yang sederhana, bermain dengan jenis data yang berbeda, dan yang paling penting, bersenang-senang!
Lanjutan Python membuka kesempatan baru yang luas, memungkinkan kamu untuk mengoptimalkan bagian kritis kode kamu atau menghubungkan dengan pustaka C yang ada. Ini adalah alat yang kuat di atas rak pembersihanmu.
Selamat coding, dan sampaijumpa lagi, teruslah untuk menjelajah dan belajar!
Credits: Image by storyset