TGViewer
انجمن علمی مهندسی کامپیوتر دانشگاه مازندران انجمن علمی مهندسی کامپیوتر دانشگاه مازندران @umz_computer · 555 subscribers
Post #336 780
🟢 پیاده‌سازی تابع داخلی len در پایتون:

💻 پایتون یه زبان سطح بالا است، ولی خیلی از توابع داخلی‌ش با C نوشته شدن تا سرعت و کارایی بیشتری داشته باشه. یکی از این توابع پرکاربرد، تابع len() هست که تعداد آیتم‌های داخل یه شیء مثل لیست، رشته یا تاپل رو به ما می‌ده. حالا می‌خواهیم ببینیم چطور این تابع در CPython (نسخه اصلی پایتون) پیاده‌سازی شده.

my_list = [1, 2, 3, 4, 5]
print(len(my_list))  # خروجی: 5


⌨️ پیاده‌سازی در C:
در CPython، تابع len() به زبان C نوشته شده و توی فایل Objects/abstract.c قرار داره. این تابع اول نوع شیء رو بررسی می‌کنه و بعد طولش رو محاسبه می‌کنه. اینجا یه نسخه ساده‌شده از کد C رو می‌بینیم:
#include <Python.h>

PyObject* PyObject_Length(PyObject *v)
{
    if (v == NULL) {
        PyErr_BadInternalCall();
        return NULL;
    }

    if (Py_TYPE(v)->tp_as_sequence != NULL &&
        Py_TYPE(v)->tp_as_sequence->sq_length != NULL) {
        return PyLong_FromLong(Py_TYPE(v)->tp_as_sequence->sq_length(v));
    }

    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    return NULL;
}


🔺بررسی PyObject_Length: وقتی از تابع len() در پایتون استفاده می‌کنیم، در واقع این تابع C از طرف CPython اجرا می‌شه.

🔺بررسی NULL: اول از همه، چک می‌کنه که شیء ورودی v مقدار NULL نداشته باشه. اگه داشته باشه، یه خطا به نام BadInternalCall ایجاد می‌شه.

🔺بررسی قابلیت طول‌گیری: بعد تابع بررسی می‌کنه که آیا شیء ویژگی tp_as_sequence رو داره یا نه. این ویژگی تابعی به اسم sq_length داره که مسئول محاسبه طول شیء است. اگه این ویژگی باشه، تابع sq_length برای محاسبه طول فراخوانی می‌شه.

🔺برگشت نتیجه: در آخر، نتیجه طول محاسبه‌شده با استفاده از PyLong_FromLong به یه شیء Python تبدیل می‌شه و برمی‌گرده.

🔺خطای نوع: اگه شیء نتونه طول داشته باشه (مثل NoneType)، یه خطای TypeError ایجاد می‌شه.

✅ این پیاده‌سازی در C باعث می‌شه که تابع len() سریع‌تر و کارآمدتر اجرا بشه. پایتون با استفاده از C برای توابع داخلی، هم راحتی و سادگی کار با توابع رو حفظ کرده و هم عملکرد بهتری رو فراهم می‌کنه.

🔗 @umz_computer
  • 👍 5
  • 🔥 4
  • ❤ 3
More from @umz_computer
  1. Oct 1, 2026📢 فراخوان ثبت‌نام دهمین جشنواره اندیشمندان و دانشمندان جوان 💡 اگر در حوزه‌های علوم پایه،…
  2. Sep 25, 2026🎓 هزاران تبریک به فارغ‌التحصیلان مهندسی کامپیوتر ورودی ۴۰۱ دانشگاه مازندران 💻 یک مسیر به…
  3. Sep 18, 2026به یه زبان خارجی مسلطی؟ 🇬🇧🇩🇪🇸🇦 انگلیسی، آلمانی، عربی یا هر زبان دیگه‌ای؟ دوست داری ا…
  4. Sep 17, 2026راهنمای ورود دانشجویان به پنل کاربری نحوه ورود به lms ریلاین + نام کاربری: شماره دانشجویی…
  5. Sep 14, 2026❗️اطلاعيه نحوه فعالیت آموزشی دانشگاه‌ مازندران نیم‌سال اول سال تحصیلی 1406 – 1405❗️ ▫️حسب…
  6. Sep 12, 2026جدول دروس عمومی و معارف اسلامی، برای انتخاب دروس عمومی در انتخاب واحد
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →