"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > متى تستخدم بايثون الاتصال حسب المرجع والاتصال حسب مرجع الكائن؟

متى تستخدم بايثون الاتصال حسب المرجع والاتصال حسب مرجع الكائن؟

تم النشر بتاريخ 2024-11-08
تصفح:136

When Does Python Use Call by Reference and Call by Object Reference?

استدعاء وظائف بايثون حسب المرجع (نسخة مكررة)

في العديد من لغات البرمجة، يمكن تمرير المعلمات حسب القيمة أو بالرجوع باستخدام كلمات محجوزة محددة . ومع ذلك، في بايثون، عندما يتم تمرير معلمة إلى دالة، فإنها لا تقوم أبدًا بتعديل قيمة المتغير الأصلي في وظيفة الاستدعاء.

مثال 1: استدعاء حسب القيمة

k = 2

def foo(n):
    n *= n
    return n

j = foo(k)
print(j)  # 4
print(k)  # 2

هنا، تظل قيمة k دون تغيير بعد استدعاء الدالة foo لأن بايثون تقوم بتمرير الوسائط حسب القيمة.

مثال 2: استدعاء بواسطة Global

لتعديل المتغير في وظيفة الاستدعاء، يمكن استخدام الكلمة الأساسية العامة.

n = 0

def foo():
    global n
    n *= n
    return n

في هذه الحالة، تسمح الكلمة الأساسية العامة بتعديل n داخل الدالة foo، وسيتم تحديث قيمتها في دالة الاستدعاء.

تمرير بواسطة مرجع الكائن في ومع ذلك، فإن بايثون

لا تتبع بدقة الاستدعاء حسب القيمة أو الاستدعاء حسب المرجع. بدلًا من ذلك، فإنها تستخدم مفهومًا يسمى "التمرير حسب مرجع الكائن".

في بايثون، تشير المتغيرات إلى الكائنات، وليس الكائنات نفسها. على هذا النحو، عندما يتم تمرير متغير إلى دالة، فإنه يمرر مرجعًا إلى الكائن، وليس الكائن نفسه.

على سبيل المثال:

def append_one(li):
    li.append(1)

x = [0]
append_one(x)
print(x)  # [0, 1]

في هذا الكود، تقوم الدالة append_one بإلحاق 1 بالقائمة x. نظرًا لأنه يتم تمرير القائمة حسب مرجع الكائن، فإن أي تغييرات يتم إجراؤها على القائمة داخل الوظيفة سوف تنعكس في وظيفة الاستدعاء.

التمرير حسب المرجع مقابل التمرير بواسطة مرجع الكائن

  • تمرير حسب المرجع: يتم تمرير مربع المتغير الأصلي إلى الوظيفة المطلوبة، مما يسمح بانعكاس أي تغييرات على محتويات المتغير في الاستدعاء وظيفة.
  • تمرير بواسطة مرجع الكائن: يتم تمرير مرجع إلى مربع الكائن الأصلي إلى الدالة التي تم استدعاؤها. تنعكس التغييرات التي تطرأ على الكائن في كل من وظائف الاستدعاء والاستدعاء، لكن التغييرات التي تطرأ على المتغير نفسه (المربع) لا تنعكس.

في الختام، تتبع بايثون مرجع الكائن بالمرور، حيث تشير المتغيرات إلى الأشياء بدلاً من الأشياء نفسها. يسمح هذا للوظائف بتعديل الكائنات التي تم تمريرها إليها، ولكن لا يتم نشر التغييرات في مراجع المتغيرات نفسها مرة أخرى إلى وظيفة الاستدعاء.

بيان الافراج أعيد طبع هذه المقالة على: 1729140861 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3