English  

كتب النحو بناء اللغة والدلالات

اذا لم تجد ما تبحث عنه يمكنك استخدام كلمات أكثر دقة.

عرض المزيد

النحو (بناء اللغة) والدلالات (معلومة)


صممت بايثون لتكون لغة ذات مقروئية عالية، تنسيقها مرتب بصرياً؛ فهي عادةً ما تستخدم كلمات إنجليزية شائعة الاستخدام في حين تستخدم لغات البرمجة الأخرى علامات الترقيم. على النقيض من العديد من اللغات الأخرى، لا تستخدم بايثون الأقواس المعقوفة { } لتحديد كتل الكود، والفاصلة المنقوطة ; بعد العبارات البرمجية اختيارية. لدى بايثون استثناءات نحوية وحالات خاصة أقل بكثير من لغة سي أو باسكال.

إزاحة

تستخدم بايثون الإزاحة بالفراغات بدلاً من الأقواس المعقوفة { } أو الكلمات المفتاحية لتحديد كتل الكود. الزيادة في الإزاحة تأتي بعد بعض العبارات؛ إنقاص الإزاحة علامة على انتهاء الكتلة الحالية. وبالتالي، فإن البنية المرئية للبرنامج تمثل بدقة البنية الدلالية للبرنامج. تُسمى هذه الميزة أحيانًا قاعدة التسلل (بالإنجليزية: off-side rule)‏، والتي تشترك فيها بعض اللغات الأخرى، ولكن في معظم اللغات، لا تحتوي الإزاحة على أي معنى دلالي.

العبارات البرمجية والتحكم بالتدفق

عبارات بايثون البرمجية تتضمن (من بين أمور أخرى):

  • عبارة مساواة (تأخذ إشارة المساواة =) تعمل بشكل مختلف عن بقية لغات البرمجة الأمرية وهذه الآلية الأساسية (تتضمن طبيعة إصدارات بايثون الخاصة بالمتغيرات) والتي تنير الطريق للعديد من ميزات اللغة الأخرى. نأخذ مثالاً عن المساواة في لغة سي: x = 2، يُترجم إلى "اسم المتغير المكتوب x يتلقى نسخة من القيمة العددية 2". تنسخ القيمة (اليمنى) في موقع تخزين مخصص بحيث يكون اسم المتغير (الأيسر) هو العنوان الرمزي. الذاكرة المخصصة للمتغير كبيرة بما يكفي (من المحتمل أن تكون كبيرة جدًا) للنوع المعلن. في أبسط حالة لإسناد بايثون (assignment)، وإذا قمنا بنفس العملية في بايثون (أي x = 2)، فإنه يُترجم إلى "اسم (generic عام) x يستقبل مرجعًا إلى كائن منفصل مُخصص ديناميكيًا نوعه العددي (int عدد صحيح) قيمته 2". هذا يسمى ربط الاسم بالكائن (binding). نظرًا لأن موقع تخزين الاسم لا يحتوي على القيمة المشار إليها، فمن غير المناسب تسميته متغيرًا. قد يتم إعادة الأسماء لاحقًا في أي وقت إلى كائنات من أنواع مختلفة اختلافًا كبيرًا، بما في ذلك السلاسل النصية strings والإجراءات والكائنات المعقدة مع البيانات والطرق،... إلخ. التعيينات (مساواة) المتتالية لقيمة مشتركة لأسماء متعددة، على سبيل المثال، x = 2؛ y = 2؛ z = 2 ينتج عن تخصيص مساحة تخزين (على الأكثر) لثلاثة أسماء وكائن عددي واحد، يتم ربط جميع الأسماء الثلاثة به. نظرًا لأن الاسم هو حامل مرجع عام (generic reference holder)، فمن غير المعقول ربط نوع بيانات ثابت به. ومع ذلك، في وقت معين، سيتم ربط الاسم بكائن ما، والذي سيكون له نوع؛ وبالتالي هناك كتابة ديناميكية.
  • العبارة إذا if، التي تنفذ كتلة الكود بشكل شرطي (أي لا ينجز إلا إدا توفر هذا الشرط)، الى جانب عبارة عدا ذلك else وelif اختصاراً لعبارة (عدا ذلك إذا else-if).
  • العبارة من أجل for، التي تتكرر فوق كائن قابل للتكرار بشكل حلقي، حيث تلتقط كل عنصر في متغير محلي لاستخدامه بواسطة الكتلة البرمجية المرفقة.
  • العبارة طالما while، التي تنفذ الكتلة البرمجية للكود طالما الشرط محقق.
  • العبارة جرّب try، التي تسمح بالتعامل مع الاستثناءات المرفوعة في مجموعة الكود المرفق والتعامل معها باستثناء except البنود؛ يضمن أيضًا تشغيل كود التنظيف في الكتلة البرمجية الأخيرة دائمًا بغض النظر عن كيفية خروج الكتلة.
  • العبارة رفع raise تستخدم لرفع استثناء محدد أو إعادة رفع استثناء تم اكتشافه.
  • العبارة صنف class، التي تقوم بتنفيذ كتلة من الكود وتربط مساحة الاسم المحلية الخاصة بها بصنف، لاستخدامها في البرمجة الموجهة للكائنات.
  • العبارة تعريف def، التي تُعرّف دالة أو طريقة.
  • العبارة مع with، من بايثون2.5 التي صدرت في سبتمبر 2006 ، والتي ترفق كتلة الكود داخل مدير السياق (على سبيل المثال، الحصول على قفل قبل تشغيل كتلة الكود وإطلاق القفل بعد ذلك، أو فتح ملف ثم إغلاقه)، والسماح لاكتساب الموارد الذي هو سلوك يشبه التهيئة (RAII) ويحل محل العبارة الإصطلاحية محاولة/أخيراً try/finally.
  • العبارة توقف break تعني أخرج من الحلقة.
  • العبارة تابع continue تتجاوز التكرارية الحالية وتتابع للعنصر التالي.
  • العبارة تجاوز pass، والتي تعمل بمثابة لا عملية. تستعمل عندما هناك حاجة نحويًا لإنشاء كتلة كود فارغة.
  • العبارة تأكيد assert، المستخدمة أثناء تصحيح الأخطاء للتحقق من الشروط التي يجب تطبيقها.
  • العبارة تحصيل yield والتي تعيد قيمة من الدالة المولّدة. بدءاً من بايثون 2.5،yield هي أيضاً عملية. هذا الشكل يستخدم عادةً لتنفيذ الروتينات المساعدة.
  • العبارة استيراد import، وهي التي تستخدم لاستيراد نماذج التي يمكن استخدام دوالها ومتغيراتها في البرنامج الحالي. يوجد ثلاث طرق لاستخدام العبارة استيراد import:
  1. import <module name> [as <alias>]
  2. from <module name> import *
  3. from <module name> import <definition 1> [as <alias 1>], <definition 2> [as <alias 2>],....
  • العبارة اطبع print والتي تغيرت الى دالة اطبع()print في بايثون 3.

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

تعبيرات

بعض تعبيرات بايثون تشبه لغات مثل سي وجافا، بينما البعض الآخر لا:

  • الجمع والطرح والضرب في بايثون مماثلة مع جافا وسي، ولكن سلوك القسمة يختلف. هناك نوعان من التقسيمات في بايثون: التقسيم الكامل (أو تقسيم العدد الصحيح) // وتقسيم الفاصلة ا(لعائمة) /. أضافت بايثون أيضًا العامل ** من أجل الأس.
  • ابتداءً من بايثون 3.5، أستحدث عامل جديد @، لغرض استخدامه من قبل المكتبات مثل نمباي لضرب المصفوفات.
  • ابتداءً من بايثون 3.8، أُدرج العامل التالي:=، الذي يطلق عليه "عامل الفظّ""walrus operator". يقوم بتعيين القيم للمتغيرات كجزء من تعبير أكبر.
  • في بايثون == تقارن الأعداد من حيث القيمة (-0.0==0.0 هي true)، بالمقابل في جافا تقارن عدديا بالقيمة أو الكائنات بالعنوان المرجعي. (من الممكن في جافا مقارنة القيمة بالكائنات عن طريق طريقة ()equals). معامل بايثون is يستخدم ليقارن هوية الكائنات (أي المقارنة بالعنوان المرجعي). في بايثون، المقارنات يمكن تقييدها، على سبيل المثالa <= b <= c.
  • بايثون تستخدم الكلمات and, or, not للعمليات البوليانية بدل من الرموز &&, ||, ! المستخدمة في جافا ولغة سي.
  • بايثون لديها نوع من التعبيرات تحت مصطلح اشتمال قائمة. مدّت بايثون 2.4 قائمة الإدراك بتعبير أكثر شمولية أي تعبير المولّد.
  • الدوال المجهولة تنفذ باستخدام تعبير لامبدا؛ ولكنها محددة؛ وفي جسمها البرمجي يمكن أن يتواجد تعبير واحد.
  • التعبيرات الشرطية في بايثون مكتوبة كالتالي x if c else y (يختلف عن بقية اللغات الأخرى في ترتيب المعاملات من المعامل الشائع c ? x : y عن بقية اللغات المختلفة).
  • تميز بايثون بين القوائم والتعديدات (tuples). القوائم مكتوبة كـ [1, 2, 3]، قابلة للتغيير، ولا يمكن استخدامها كمفاتيح القواميس (مفاتيح القاموس غير قابلة للتغيير في بايثون). أما التعديدات: (1, 2, 3)، فهي غير قابلة للتغيير وبالتالي يمكن استخدامها كمفاتيح القواميس، شريطة أن تكون جميع عناصر التعديد غير قابلة للتغيير. يمكن استخدام عامل + لسَلسَّلة لتعديدتان، والتي لا تُعدل محتوياتها بشكل مباشر، بل تنتج تعديدة جديدة تحتوي على عناصر التعديدتين المقدمة. وبالتالي، بالنظر إلى المتغير t الذي يساوي مبدئيًا (1, 2, 3),، فإن إجراء t = t + (4, 5)يقيِّم أولاً t + (4, 5)، والذي ينتج (1, 2, 3, 4, 5)، والتي تعين بعد ذلك إلى t، وبالتالي "تعديل محتويات"t بشكل فعال، مع التوافق مع الطبيعة الثابتة لكائنات التعديدة. ويجدر العلم إلى أن الأقواس اختيارية لمجموعة التعديدات في سياقات لا لبس فيها.
  • تتميز بايثون بتفريغ تسلسل حيث يرتبط تعبيرات متعددة، كل منها يتم تقيم إلى أي شيء يمكن تعيينه إلى (متغير، خاصية قابلة للكتابة، إلخ.)، بطريقة مماثلة لتلك التي تشكل حرفيات التعديدات، وبشكل عام، يتم وضعها على الجانب الأيسر من علامة المساواة في عبارة المساواة. تتوقع العبارة وجود كائن قابل للتكرار على الجانب الأيمن من علامة المساواة ينتج نفس عدد القيم التي تحتوي عليها التعبيرات القابلة للكتابة عند تكرارها من خلاله، وسوف تتكرر من خلاله، مع تعيين كل من القيم المنتجة للتعبير المقابلة على اليسار.
  • بايثون لديها عامل % "لتنسيق سلسلة نصية". هذه الوظيفة مشابهة للتنسيق الخاص بالسلسلة النصية printf في لغة سي، على سبيل المثال؛ "spam=%s eggs=%d" % ("blah", 2) تقيّم ك"spam=blah eggs=2". في بايثون 3 و2.6+ استكمل هذا بواسطة طريقة format() الخاصة ب الصنف str على سبيل المثال "spam={0} eggs={1}".format("blah", 2). بايثون 3.6 أضافت"f-strings" التالي:blah = "blah"; eggs = 2; f"spam={blah} eggs={eggs}".
  • بايثون لديها حرفيات السلاسل النصية متنوعة:
    • سلاسل محددة بعلامات اقتباس مفردة أو مزدوجة. على عكس شل يونكس، وبيرل واللغات المتأثرة ب ب حيث تعمل علامات الاقتباس المفردة وعلامات الاقتباس المزدوجة بشكل متماثل وظيفياً. يستخدم كلا النوعين من الخط المائل () رمزًا للهروب. أصبح استكمال السلسلة النصية متاحًا في بايثون 3.6 كـ " سلسلة منسقة حرفياً".
    • سلاسل نصية بعلامات اقتباس ثلاثية، التي تبدأ وتنتهي بسلسلة من ثلاث علامات اقتباس مفردة أو مزدوجة. قد تمتد على عدة أسطر وتعمل مثل توثيقات هير الموجود في شيل وبيرل وروبي.
    • تشكيلة السلسلة النصية الخام، يُشار إليها بادئة السلسلة الحرفية بحرف r. لا يفسر تسلسل الهروب. ومن ثم تكون السلاسل النصية الأولية مفيدة عندما تكون الخطوط المائلة العكسية الحرفية شائعة، مثل التعبيرات النمطية والمسارات بنمط ويندوز. بالمقارنة مع "اقتباس-@" (@-quoting) في سي شارب.
  • لدى اقتباس بايثون quotPython تعبيرات فهرس مصفوفة شرائح المصفوفة (array slicing) في القوائم، يُشار إليها على أنها [مفتاح] a[key],أو [بداية: توقف]a[start:stop] أو [بداية: توقف: خطوة]a[start:stop:step]. الفهارس ذات أساس صفري، والفهارس السلبية تتعلق بالنهاية. تأخذ الشرائح العناصر من فهرس البداية حتى فهرس التوقف، ولكن لا تتضمنه. تسمح معلمة الشريحة الثالثة، المسماة خطوة أو مرحلة، بتخطي العناصر وعكسها. قد تهمل فهارس الشرائح، على سبيل المثال، تُرجع a[:]نسخة من القائمة بالكامل. كل عنصر في الشريحة هو نسخة ضحلة.
  • في بايثون، يفرض تمييز صارم بين التعبيرات والعبارات، على عكس اللغات مثل ليسب الشائع Common Lisp أو سكيم أو روبي. هذا يؤدي إلى تكرار بعض الوظائف. فمثلا:
    • اشتمال قائمة مقابل حلقة لأجل for-loops.
    • العبارات الشرطية مقابل كتل إذا if البرمجية.
    • ال ()eval مقابل ()exec دوال المرفقة (في ب ايثون 2،exec هي عبارة برمجية) الأول للتعبيرات، والثاني للعبارات البرمجية.

لا يمكن أن تكون العبارات جزءًا من تعبير، ل ذلك لا يمكن أن تحتوي القائمة وغيرها من الاشتمالات أو تعبيرات لامبدا (تعتبر كلها تعبيرات) على عبارات. وتبقى هناك حالة استثنائية تتمثل في أن عبارة المساواة (التعيين) مثل a = 1 لا يمكن أن تكون جزءًا من التعبير الشرطي لعبارة شرطية. وهذا يفيد في تجنب خطأ لغة سي الكلاسيكي عن غلطة في عامل التعيين = لعامل المساواة == في الشروط: إذا كان (c = 1) {...} : {... }if (c = 1) صالحًا من الناحية النحوية (ولكن غالبا هو غير مقصود) كشيفرة (كود) لغة سي بالمقابل ...:if c = 1 يسبب خطأً نحوياً في بايثون.

الطرق

الطرق المطبقة على الكائنات هي دوال مرتبطة بصنف الكائن. نحوياً تمثيل. طريقة (قيمة)instance.method(argument). للطرق العادية والتجميل اللغوي للدوال من أجل صنف. طريقة (مثيل،قيمة)Class.method(instance, argument). طرق بايثون لديها معلمة صريحة ذات self للوصول لبيانات المثيل، على النقيض من الذات الضمنية self (أو هذه this) في بعض لغات البرمجة الأخرى (مثل سي++ أو جافا أو سي-الكائنية أو روبي).

التنويع

تستخدم بايثون تنويع البط ولديها نوع للكائنات ولكن ليس لديها نوع لأسماء المتغيرات. لا يتحقق من قيود النوع في وقت التجميع؛ بدلاً من ذلك، قد تفشل العمليات على كائن ما، مما يدل على أن الكائن المحدد ليس من النوع المناسب. على الرغم من تنويعها بشكل ديناميكي، بايثون منوعة بقوة، مما يمنع العمليات غير المعرّفة جيدًا (على سبيل المثال، إضافة رقم إلى سلسلة نصية) بدلاً من محاولة فهمها بشكل صامت.

تسمح بايثون للمبرمجين بتحديد أنواعهم الخاصة باستخدام الأصناف، والتي غالبًا ما تستخدم في البرمجة الكائنية. تنشأ مثيلات جديدة الأصناف عن طريق استدعاء الصنف (على سبيل المثال، ()SpamClass أو()EggsClass)، الأصناف هي مثيلات من نوع صنف علوي (نفسها مثيل لنفسها)، مما يسمح بالبرمجة الوصفية والانعكاس. قبل الإصدار 3.0، كان لدى بايثون نوعين من الأصناف: الطراز القديم والأسلوب الجديد. النحو لكلا الأسلوبين هو نفسه، والفرق هو ما إذا كان كائن object الصنف موروثًا، بشكل مباشر أو غير مباشر (جميع الأصناف من النمط الجديد ترث من الكائن object وهي مثيلات من النوع type). في إصدارات بايثون 2 من بايثون 2.2 وما بعده، يمكن استخدام كلا النوعين من الأصناف. أزل المطورون أصناف الطراز القديم في بايثون 3.0.

الخطة طويلة المدى هي دعم التنويع التدريجي بدءاً من بايثون 3.5، تسمح اللغة نحوياً بتحديد أنواع ثابتة ولكن لا يتم التحقق منها في التنفيذ الافتراضي، سي بايثون. يدعم المدقق التجريبي للنوع الثابت والمسمى mypy التحقق من النوع في وقت التجميع.

^a غير قابل للوصول بشكل مباشر عن طريق الاسم

رياضيات

لدى بايثون الرموز المعتادة للمعاملات الحسابية (+، -، *، /)، عامل التقسيم المكمل لأسفل (دالة الجزء الصحيح) // وعامل التقسيم مع باقي % (حيث يمكن أن يكون الباقي سالبًا، على سبيل المثال 4% -3 ==-2). واللغة لديها أيضًا العامل ** للرفع الأسي، على سبيل المثال 3**5 == 125 و0.5**9 == 3.0، وعامل ضرب المصفوفة @. تعمل هذه المعاملات الحسابية كما هو الحال في الرياضيات التقليدية؛ باستخدام نفس قواعد ترتيب العمليات الحسابية، يمكن أن يكون العامل ترميزاً ضمنياً (أيضاً يمكن أن يكون الرمزان + و- أحاديين لتمثيل الأرقام الموجبة والسالبة على التوالي). ينتج عن القسمة بين الأعداد نتائج ذات فاصلة عائمة. تغيّر سلوك القسمة في بايثون بشكل كبير بمرور الوقت:

  • بايثون 2.1 والإصدارات السابقة استخدموا للقسمة سلوكاً شبيهاً بالقسمة في سي. عامل / هو عامل قسمة عدد صحيح إذا كان كلا المعاملين عددين صحيحين وخلاف ذلك قسمة بفاصلة عائمة. التقسيم للأعداد الصحيحة يقرب نحو 0، على سبيل المثال 7/3 == 2 و7/3- == 2-.
  • في بايثون 2.2 تغير أسلوب القسمة مرة أخرى إلى التقريب نحو اللانهاية السلبية، على سبيل المثال 7/3 == 2 و7/3- == 3-. أدخل عامل تقسيم المكمل لأسفل//. لذا 3//7== 2, 3 //7-== 3-, 3// 7.5== 2.0 و3//7.5- == 3.0-. تؤدي إضافة from __future__ import division إلى أن يستخدم النموذج (module) قواعد بايثون 3.0 للقسمة (انظر أدناه).
  • بايثون 3.0 غير أسلوب القسمة لتصبح قسمة فاصلة عائمة دائمًا ،على سبيل المثال 5/2 == 2.5.

في مصطلحات بايثون، / هي القسمة الحقيقية (أو ببساطة القسمة)، و// القسمة المكملة لأسفل. ولكن، قبل الإصدار 3.0 كان العامل / يمثل القسمة الكلاسيكية (أي الأقليدية). التقريب نحو اللانهاية السلبية تضيف الاتساق، على الرغم من اختلافها عن معظم اللغات. على سبيل المثال، المعادلة صحيحة دائمًا. والمعادلة b*(a//b) + a%b == a صالحة لكل من القيم الموجبة والسالبة لـ a. بالمقابل، فإن الحفاظ على صحة هذه المعادلة يعني أنه في حين أن نتيجة a%b هي في المجال نصف المفتوح ، حيث أن b هو عدد صحيح موجب، يجب أن تقع في المجال عندما تكون b سالبة.

يوفر بايثون دالة round لتقريب العدد ذو الفاصلة العائمة إلى أقرب عدد صحيح. لفك التعقيد، يستخدم بايثون 3 التقريب لعدد زوجي: round(1.5) round(2.5) ناتج كليهما هو 2. أما الإصدارات السابقة فتستخدم تقريبًا بعيدًا عن الصفر: round(0.5) هو 1.0، round(-0.5) هو 1.0−.

تسمح بايثون بالتعبيرات البوليانية بعلاقات المساواة المتعددة بطريقة تتوافق مع الاستخدام العام في الرياضيات. على سبيل المثال: التعبير a < b < c، يتحقق بايثون ما إذا كانت a أصغر من b وb أصغر من c. بعكس اللغات المشتقة من سي التي تفسر هذا التعبير بشكل مختلف: في سي، يقوم التعبير أولاً بتقييم a < b، مما يؤدي إلى 0 أو 1، ثم تتم مقارنة هذه النتيجة مع c.

تستخدم بايثون حساب تدريج الدقة الاعتباطية لجميع العمليات الصحيحة. يوفر الصنف (أو النوع) Decimal في نموذج decimal أعداد عشرية بفاصلة عائمة وبدقة اعتباطية محددة مسبقاً والعديد من وسائل التقريب. ويوفر صنف Fraction في نموذج fractions الدقة الاعتباطية للأعداد الكسرية.

نظرًا لسعة مكتبة بايثون للرياضيات، ومكتبة الطرف الثالث نمباي التي توسع القدرات المحلية بشكل أكبر، استخدمت بايثون بشكل متكرر كلغة نصية علمية للمساعدة في حل عدة مسائل مثل معالجة البيانات العددية والتلاعب.

الترميز

ابتداءً من بايثون 2.1، لاستخدام أحرف غير الأسكي في نص البرنامج، يجب عليك تحديد ترميز شفرة المصدر بشكل صريح في بداية الوحدة، على سبيل المثال:

# -*- coding: utf-8 -*- # أو # coding: utf-8

ولكن حتى لو اكتفيت بكتابة:

# coding: utf

"سيفهم" بايثون ما تقصد.

الوراثة

تدعم بايثون الوراثة المتعددة. ابتداءً من النسخة 2.3 تدعم بايثون خوارزمية سي 3، المقتبسة من لغة البرمجة ديلان لحل مشكل ترتيب حل الطريقة. بينما استعملت خوازمية البحث المتعمق الذي يطرح مشاكل في حالة الوراثة الألماسية.

المصدر: wikipedia.org