التعبير مثل len(things) أو print(things) يسمى استدعاء دالة (Function call)؛ فعندما تكتب ذلك فأنت تستدعي الدالة len أو print. وإمكان استدعاء الدالة بهذه الصورة يعني أن الدوال قابلة للاستدعاء (Callable):
__program_indented__
معظم الأشياء في بايثون ليست قابلة للاستدعاء، ولذلك فإن محاولة استدعائها ستؤدي إلى خطأ:
__program_indented__
في الاستدعاء len(things) تُسمى thingsوسيطًا (Argument). وقد ترى أحيانًا كلمة معامل (Parameter)، وهي قريبة جدًا في المعنى. يمكنك تصور الأمر كأنك تعطي الوسيط للدالة؛ فنقول إن thingsيُمرر إلى len، وإن lenتقبل أو تستقبل هذا الوسيط.
التعبير len(things) سيُقيَّم إلى عدد مثل 3، وعندها نقول إن الدالة lenأرجعت (Returned) القيمة 3.
كل استدعاء دالة يجب أن يُرجع شيئًا، حتى لو كان ذلك الشيء يمثل «لا شيء مفيد». وظيفة print مثلًا هي عرض شيء على الشاشة، وليست إرجاع قيمة نافعة. لذلك تُرجع قيمة خاصة غير مفيدة في هذا السياق:
__program_indented__
None قيمة خاصة تمثل غياب قيمة مفيدة فعلية. تُستخدم كثيرًا كقيمة فارغة أو مكان مؤقت. والدوال التي لا تريد إرجاع شيء محدد تُرجع None افتراضيًا.
إذا رأيت رسالة خطأ تتحدث عن None أو NoneType فهذا يعني كثيرًا أنك أسندت إلى متغير قيمة مختلفة عما كنت تقصده. جرّب المثال:
__program_indented__
الأسلوب (Method) هو دالة تنتمي إلى نوع معين، ويمكن استدعاؤها على قيم ذلك النوع باستخدام النقطة .. مثلًا، upper وlower أسلوبان للنصوص، ويمكن استدعاؤهما مثل word.upper():
__program_indented__
مثال آخر: append أسلوب خاص بالقوائم. لكن لا يمكنك استخدام .upper على قائمة، ولا .append على نص:
__program_indented__
كلمة attribute في رسالة الخطأ تشير إلى استخدام النقطة .. والخطأ يحدث أصلًا عند الوصول إلى word.append حتى قبل محاولة استدعائه كدالة.