الأشياء التي تحتاج إلى معرفتها إذا كنت تريد التبديل من PHP إلى Python

هل فكرت يومًا أنك دخلت برمجة PHP على الويب بسرعة كبيرة؟
مرت عدة سنوات بالفعل ، لقد اكتسبت الكثير من الخبرة ولا يمكنك التفكير في أي طرق أخرى للعمل مع الويب ولكن باستخدام PHP. ربما تشك في بعض الأحيان في الاختيار الذي حددته ، لكنك غير قادر على تأكيد شكوكك هنا والآن. في الوقت نفسه ، تحتاج إلى أمثلة حقيقية ؛ كنت ترغب في فهم التغييرات التي قد تحدث في جوانب معينة من عملك.

سأحاول اليوم الإجابة على السؤال التالي: " ماذا لو استخدمنا بايثون بدلاً من PHP؟ ".

لقد طرحت هذا السؤال بنفسي عدة مرات. لقد استخدمت PHP منذ 11 عامًا وأنا متخصص في PHP معتمد. لقد أتقنت ذلك حتى يعمل بالطريقة التي أريدها. لقد حيرتني حقًا العديد من المقالات التي انتقدت PHP بشدة ( PHP: كسورية من التصميم السيئ ). ومع ذلك ، عندما جاءت الفرصة ، تحولت إلى روبي ثم إلى بيثون. في النهاية ، اخترت هذا الأخير. الآن سأحاول شرح كيف نعيش نحن بيثون هناك.



تنسيق المادة


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

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

إعداد لوحات المفاتيح


لقد بذلت قصارى جهدي لجعل هذه المقالة تفاعلية. لذلك ، أوصي بتشغيل جميع الأمثلة في لوحات المفاتيح عند قراءة المقال. ستحتاج إلى وحدة تحكم PHP ، أو يمكنك استخدام وحدة PsySH ، وهي أفضل:

php -a 

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

 python 

ثم:

 import rlcompleter import readline readline.parse_and_bind("tab: complete") # Enable autocomletion 

تجنب تكرار هذه الإجراءات
إنشاء ملف ~ / .pyrc باستخدام:

 import rlcompleter import readline readline.parse_and_bind("tab: complete") 

أضف أسطرًا قليلة في ملف ~ / .bashrc:

 export PYTHONSTARTUP="${HOME}/.pyrc" export PYTHONIOENCODING="UTF-8" 

عدن لإجراء تغييرات على الفور دون إعادة تسجيل الدخول:

 source ~/.bashrc 


عن اللغات


  • Python هي لغة تتميز بالكتابة الديناميكية القوية للبط ( راجع معلومات عن الطباعة ). بيثون ليست محدودة من حيث تطبيقها. يتم استخدامه لتطوير الويب أو الشياطين أو الحسابات العلمية أو كلغة من الملحقات. لغات مماثلة من حيث الكتابة: Ruby.
  • PHP هي لغة تتميز بضعف الكتابة الديناميكية للبط. تعد لغة PHP لغة مشتركة الغرض ، إلا أن مجال التطبيق الخاص بها يغطي في الغالب الويب والشياطين. لا تعمل الميزات الأخرى بشكل صحيح ، مما يجعلها غير قابلة للتطبيق في الإنتاج. بعض الناس يعتقدون أن المقصود PHP للموت . لغات مماثلة من حيث الكتابة: JavaScript ، Lua ، Perl.

تفاصيل عامة


  • تتم كتابة التعليمات البرمجية في ملفات .py بغض النظر عن إصدار Python. ليست هناك حاجة إلى علامات فتح مثل <؟ PHP ، حيث تم تطوير Python في الأصل كلغة برمجة للأغراض العامة.
  • بالإضافة إلى ذلك ، لا يوجد php.ini لنفس السبب. هناك عشرين
    متغيرات البيئة ، ومع ذلك فهي غير محددة في معظم الحالات (بصرف النظر عن PYTHONIOENCODING). بمعنى آخر ، لا توجد اتصالات افتراضية للقواعد ، وإدارة مرشح الأخطاء ، وإدارة الحد ، والإضافات ، وما إلى ذلك ، وهو أمر طبيعي بالنسبة لمعظم اللغات للأغراض العامة. نتيجة لذلك ، تتصرف البرامج بطريقة مماثلة في معظم الحالات (لا يعتمد سلوكها على الإعدادات المفضلة لقيادة فريقك). يتم تخزين الإعدادات مثل php.ini في ملف التكوين الرئيسي لأحد التطبيقات في معظم الحالات.
  • ليست هناك حاجة لفاصلة منقوطة في نهاية السلسلة. ومع ذلك ، إذا وضعنا فاصلة منقوطة هناك ، فإنه يعمل كما في PHP. ومع ذلك ، فإنه غير ضروري وغير مرغوب فيه ، لذلك يمكنك ببساطة نسيانها.
  • لا تبدأ المتغيرات بـ $ (وهو ما ورثه PHP من Perl والذي اعتمده بدوره
    من باش).
  • لا يتم تطبيق الواجب في الدورات والظروف ، بحيث لا تقارن أي أخطاء في المهمة ، وهذا خطأ شائع (كما يعتقد مؤلف اللغة). انظر PEP 572 لمعرفة بيثون 3.8 إذا كنت في حاجة إليها.
  • عند تحليل الملفات ، تضع Python تلقائيًا نسخة الملف بامتداد .pyc (شريطة أن يكون إصدار Python أقل من 3.3 وأنك لم تقم بتثبيت PYTHONDONTWRITEBYTECODE ) في نفس المجلد الذي يوجد به رمز البايت الخاص بك. ثم ينفذ هذا الملف دائمًا ، ما لم تقم بتغيير المصدر.
    يتم تجاهل هذه الملفات تلقائيًا في جميع IDEs ولا تتدخل بشكل عام. يمكن اعتبار هذه الميزة بمثابة تناظرية كاملة لـ PHP APC ، مع الأخذ في الاعتبار أن ملفات .pyc ستوجد على الأرجح في ذاكرة التخزين المؤقت للملف.
  • بدلاً من NULL ، TRUE ، false ، يجب أن نستخدم None ، True ، false (خاصةً في هذه الحالة).

التعشيش و المسافة البادئة


إليك شيء غير عادي: يتم تحديد تداخل الكود مع المسافات البادئة بدلاً من الأقواس.

لذلك ، بدلا من:

 foreach($a as $value) { $formatted = $value.'%'; echo $formatted; } 

يجب أن نكتب ما يلي:

 for value in a: formatted = value + '%' print(formatted) 

انتظر ، انتظر! لا تغلق المقالة. هنا قد ترتكب الخطأ الذي ارتكبته.
مرة واحدة اعتقدت أن فكرة استخدام المسافات البادئة للتداخل تداخل التعليمات البرمجية سخيفة. كانت طبيعتي بأكملها تحتج على ذلك ، لأن جميع المطورين يكتبون الكود الخاص بهم بطريقتهم الخاصة ، بغض النظر عن دلائل الأنماط المختلفة.
هنا سر العالم: لا توجد مشكلة المسافة البادئة. في معظم الحالات (99٪ من الحالات) يتم وضع المسافات البادئة تلقائيًا بواسطة IDE كما هو الحال في أي لغة أخرى. أنت فقط لا تفكر في ذلك على الإطلاق. لم أواجه أي مشكلة متعلقة بالمسافات البادئة على مدى عامين من استخدام اللغة.

كتابة قوية


الشيء التالي الذي يجب الانتباه إليه هو الكتابة القوية. ومع ذلك ، بعض التعليمات البرمجية أولاً:

 print '0.60' * 5; print '5' == 5; $a = array('5'=>true); print $a[5]; $value = 75; print $value.'%'; $a='0'; if($a) print 'non zero length'; // Will not print, common mistake 

جميع الأمثلة المذكورة أعلاه ممكنة بفضل الكتابة الديناميكية.
نعم أعلم أن إعلان النوع متاح لـ PHP. ولكن لا يتم تمكينه بشكل افتراضي ولا يعمل في كل مكان.

ومع ذلك ، لن يعمل ما يلي في Python:

 >>> print "25" + 5 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: cannot concatenate 'str' and 'int' objects 

باستثناء ...
باستثناء القيم المنطقية ولكنها حسب التصميم .

عادة لن يتم خلط أنواع البيانات في التعليمات البرمجية الخاصة بك ولن يؤدي هذا التأثير إلى صرف انتباهك. بشكل عام ، عندما قمت بترميز PHP ، لم يكن هناك سوى عدد قليل من المواقف لكل مشروع عندما ساعدت الكتابة الديناميكية بالفعل. في جميع الحالات الأخرى ، تتفاعل المتغيرات من نفس النوع مع بعضها البعض.

الكتابة القوية تؤثر على معالجة الأخطاء. على سبيل المثال ، إذا كانت دالة int تُرجع عددًا صحيحًا ، فلن تتمكن من إرجاع بلا إلى سلسلة ، والتي لا يمكن استخراج هذا النوع منها بشكل صريح. في هذه الحالة ، سيتم رفع استثناء. قد يتطلب الأمر تحويل جميع بيانات المستخدم إلى نوع البيانات المطلوب ، وإلا فسيتم رفع استثناء في إصدار الإنتاج في يوم واحد.

 try: custom_price = int(request.GET.get('custom_price', 0)) except ValueError: custom_price = 0 

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

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

سلاسل


التنسيق


في PHP:

 $this_way = 'this_way'; echo "Currently you do it $this_way or {$this way}."; echo "Or ".$this_way."."; echo sprintf("However the following is possible: , %s or %1$'.9s.", $this_way); 

الآن يجب أن تتعلم القيام بذلك بطريقة مختلفة:

 etot = 'this' var = 'option' print('To %s option' % etot) print(etot + ' option can also be used, but not recommended) print('Or to %s %s' % (etot, var)) print('Or to %(etot)s %(var)s' % {'etot': etot, 'var': var}) # Very useful for localization team print('Or to {} {}'.format(etot, var)) print('Or to {1} {0}'.format(var, etot)) print('Or to {etot} {var}'.format(var=var, etot=etot)) # And finally print(f'Or to {etot} {var}') # Starting from Python 3.6 

هناك المزيد من الخيارات وهناك خيار مناسب للترجمة.

طرق السلسلة


بيثون لديه شيء مفقود في PHP: الأساليب المدمجة. دعنا نقارن:

 strpos($a, 'tr'); trim($a); 

مقابل

 a.index('tr') a.strip() 

وكيف وغالبا ما تفعل شيئا من هذا القبيل؟

 substr($a, strpos($a, 'name: ')); 

مقابل

 a[a.index('name: '):] 

دعم يونيكود


وأخيرا ، يونيكود. في Python 2 ، جميع السلاسل ليست Unicode افتراضيًا. (في Python 3 ، جميع السلاسل هي Unicode افتراضيًا). ومع ذلك ، عند إضافة الحرف u في بداية السلسلة ، يصبح تلقائيًا Unicode. وبعد ذلك ستعمل جميع أساليب سلسلة بيثون المدمجة (وغير المدمجة) بطريقة صحيحة.

 >>> len(' ') # Hello world in Russian 19 >>> len(u' ') 10 

في PHP ، تم تطوير معالجة Unicode الطبيعية لـ PHP 6 ولكن تم إلغاء PHP 6 ( Andrei Zmievski: Waht حدث لـ Unicode و PHP 6 ).
في PHP ، بالمناسبة ، يمكنك استخدام التحميل الزائد لوظيفة MBString لتلقي تأثير مماثل ولكن تم إهماله.
ومع ذلك ، لن تكون قادرًا على العمل مع سلاسل ثنائية باستخدام وظائف محمّلة بشكل زائد ، ولكن لا يزال بإمكانك العمل مع سلسلة كصفيف.

حول السلاسل الخام (اختياري)

سلاسل الخام


يجب أن تعرف الفرق بين السلاسل المفردة المقتبسة والسلاسل المقتبسة مزدوجة:

 $a = 'Hello.\n'; $a[strlen($a)-1] != "\n"; 

ميزة مماثلة في بيثون تسمى سلاسل الخام. لاستخدامها ، وضع كريبتيد آر قبل سلسلة واحدة ونقلت.

 a = r'Hello.\n' a[-1] != '\n' 


المصفوفات


الآن حان الوقت للصفائف. في PHP ، يمكنك استخدام أعداد صحيحة أو سلاسل كمفاتيح:

 var_dump([0=>1, 'key'=>'value']); 

في PHP ، لا تعد الصفائف صفائف قياسية ( قوائم ) ، ولكنها صفائف ترابطية ( قاموس ). المصفوفات القياسية متوفرة أيضًا في PHP ، فهي SPLFixedArray . تتطلب ذاكرة أقل ، يحتمل أن تعمل بشكل أسرع ، ولكن نظرًا لتعقيد الإنشاء والتمديد ، نادراً ما يتم استخدامها.

في Python ، يتم استخدام أربعة أنواع من البيانات لصفيف:

  • القائمة

     a = [1, 2, 3] # short form a[10] = 11 # Unexist indexes cannot be added. # > IndexError: list assignment index out of range a.append(11) # but you can adds an element to the end of a list. del a[0] # and delete the element using the index a.remove(11) # and also remove an element using its value 
  • إملاء القاموس. ليس للقواميس أي ترتيب لتخزين البيانات (كما هو الحال في PHP).

     d = {'a': 1, 'b': 2, 'c': 3} # short form d[10] = 11 # Random indexes can be added d[True] = False # And use any immutable types (integers, strings, booleans, tuples, frozen-sets) del d[True] # And delete using a key 
  • tuple. شيء يشبه مجموعة ثابتة من القيم غير المتجانسة. مناسب تمامًا لإرجاع العديد من القيم من وظيفة ولتخزين مضغوط للتكوينات.

     t = (True, 'OK', 200, ) # short form t[0] = False # Elements are immutable # > TypeError: 'tuple' object does not support item assignment del t[True] # Cannot be deleted using a key # > TypeError: 'tuple' object doesn't support item deletion t = ([], ) # However, nested mutable structures can be muted (lists, dictionaries, sets, bite arrays, objects) t[0].append(1) # > a == ([1], ) 
  • ضبط. في الأساس ، هذه قائمة بالقيم الفريدة التي ليس لها ترتيب للتخزين.

     s = set([1,3,4]) s[0] = False # sets do not support indexing # > TypeError: 'set' object does not support indexing s.add(5) # adds an element s.remove(5) # deletes an element # # Standard maths for sets s | s # Merge s & s # Intersection s - s # Difference s ^ s # Merge of unique elements 

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

  • أولاً: إن إمكانية الاختيار بين tuple ، و set ، و list ، و dict ، لا تجعل الأمور صعبة - بل تصبح عادةً غير واعية مثل تغيير التروس.
  • ثانياً: تستخدم القائمة أو الإملاء في معظم الحالات.
  • ثالثًا: في معظم الحالات ، عندما تحتاج إلى تخزين زوج قيمة المفتاح ، فإن الترتيب ليس ضروريًا ، ومع ذلك ، عندما تحتاج إلى الاحتفاظ بالترتيب ، ففي معظم الحالات تكون هناك قيم فقط بدلاً من أزواج قيمة المفتاح.
  • رابعًا: لدى بايثون قاموس مرتب - OrderedDict .


الواردات


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

في Python ، ومع ذلك ، كل ملف له مساحة الاسم الخاصة به. نتيجة لذلك ، سيحتوي الملف فقط على الكائنات التي تقوم باستيرادها هناك. بشكل افتراضي ، تتوفر مكتبة Python القياسية فقط (حوالي 80 وظيفة).

راجع المثال أدناه:
لنفترض أنك قمت بإنشاء ملف أدوات / logic.py :

 def is_prime(number): max_number = int(sqrt(number)) for multiplier in range(2, max_number + 1): if multiplier > max_number: break if number % multiplier == 0: return False return True 

الآن ، تريد استخدامه في ملف main.py. في هذه الحالة ، تحتاج إلى استيراد الملف بأكمله أو كيانات الملفات التي تحتاجها في الملف الهدف الذي تعمل عليه.

 from tools.logic import is_prime print(is_prime(79)) 

تنطبق هذه القاعدة على بيثون. في معظم الحالات ، عندما تبدأ العمل على أي ملف ، تحتاج أولاً إلى استيراد كائنات Python الإضافية إلى ملفك: مكتباتك الخاصة والمتكاملة. يبدو الأمر كما لو أن وظائف PHP مثل mysqli_ * ، ​​pdo_ * ، ​​memcached_ * ، ​​وكذلك الكود بالكامل ، يتم تخزينها في مسافات اسم وعليك استيرادها إلى كل ملف تعمل معه. ما هي المزايا التي يتمتع بها هذا النهج؟

  • أولاً: يمكن أن يكون للكائنات المختلفة في الملفات المختلفة أسماء متطابقة. ومع ذلك ، فمن أنت الذي يحدد الكائن واسمه والملف الهدف.
  • ثانياً: إعادة بناء المساكن أسهل بكثير. يمكنك دائمًا تتبع فئة أو وظيفة أو أي كيان آخر. استخدم بحثًا بسيطًا لتحديد موقع الوظيفة ومعرفة أين / كيف يتم استخدامها.
  • ثالثًا: هذه الميزة تجعل المطورين يفكرون في بنية الكود (على الأقل إلى حد ما).

من ناحية أخرى ، يمكننا أن نذكر عيبًا واحدًا - الواردات الدائرية . ومع ذلك ، فهي مشكلة نادرة. علاوة على ذلك ، إنها مشكلة مألوفة ، والمطورين يعرفون طرق حلها.

هل من السهل استخدام الواردات طوال الوقت؟ ذلك يعتمد على تفضيلاتك. إذا كنت ترغب في الحصول على مزيد من التحكم في الكود ، فستفضل استخدام الواردات. حتى أن بعض الفرق لديها قواعد تنظم ترتيب تعيين الشفرة الخارجية ، وذلك لتقليل كمية الواردات الدائرية. إذا لم يكن لدى فريقك مثل هذه القواعد ولا تريد أن تزعجك كثيرًا ، يمكنك ببساطة الاعتماد على IDE الذي سيقوم تلقائيًا باستيراد كل ما تستخدمه. بالإضافة إلى ذلك: ليست الواردات ميزة بيثون فريدة من نوعها ، بل تُستخدم أيضًا في Java و C #.

لم تكن هناك شكاوى حتى الآن.

المعلمات * args و ** kwargs في دالة


بناء الجملة مع المعلمات الافتراضية هو نفسه عموما:

 function makeyogurt($flavour, $type = "acidophilus") { return "Making a bowl of $type $flavour."; } 

مقابل

 def makeyogurt(flavour, ftype="acidophilus"): return "Making a bowl of %s %s." % (ftype, flavour, ) 

ومع ذلك ، قد تحتاج في بعض الأحيان إلى وظيفة لعدد غير معروف من الوسائط.
على سبيل المثال ، وظيفة وكيل ، وظيفة تسجيل ، أو وظيفة لاستقبال الإشارات. في PHP ، بدءًا من الإصدار 5.6 ، يتوفر بناء الجملة التالي:

 function sum(...$numbers) { $acc = 0; foreach ($numbers as $n) { $acc += $n; } return $acc; } echo sum(1, 2, 3, 4); // or echo add(...[1, 2, 3, 4]); 

على التوالي ، في Python ، يمكنك إضافة وسائط غير مسماة في صفيف ، وإضافة وسائط مسماة في القاموس:

 def acc(*args, **kwargs): total = 0 for n in args: total += n return total print(acc(1, 2, 3, 4)) # or print(acc(*[1, 2, 3, 4])) 

على التوالي ، * args - قائمة الوسائط غير المسماة ، ** kwargs - قاموس الوسائط المسماة.

فصول


ألقِ نظرة على الكود أدناه:

 class BaseClass: def __init__(self): print("In BaseClass constructor") class SubClass(BaseClass): def __init__(self, value): super(SubClass, self).__init__() # or short form: super().__init__() starting from Python 3 self.value = value def __getattr__(self, name): print("Cannot found: %s" % name) c = SubClass(7) print(c.value) 

الاختلافات الرئيسية من PHP هي كما يلي:

  • يتم استخدام self بدلاً من $ this ، ويتم استدعاء الأساليب دائمًا باستخدام عامل الوصول ("."). بالإضافة إلى ذلك ، يجب أن تكون "النفس" دائمًا هي الحجة الأولى في جميع الطرق (جيدًا ، في معظمها). النقطة المهمة هي أن Python يوفر لكل الطرق رابطًا للكائن باستخدام الوسيطة الأولى (يمكن إضافة الكائن نفسه إلى متغير بأي اسم).
  • كما هو الحال في PHP ، هناك تناظرية للأسماء السحرية . بدلاً من __construct - __init__ . بدلاً من __get - __getattr__ ، إلخ.
  • الجديد غير مطلوب. إنشاء مثيل فئة هو نفس استدعاء دالة.
  • دعوة أكثر تعقيدًا إلى الأسلوب الأصل. أما بالنسبة إلى super ، فأنت تحتاج دائمًا إلى وضع كل التفاصيل في الاعتبار. الأصل :: أما بالنسبة لـ PHP ، فإن الهيكل أقل حجماً.

يجب أن نذكر أيضًا ما يلي:

  • أكثر من فئة واحدة يمكن أن تكون موروثة.
  • لا العامة ، محمية ، القطاع الخاص . يسمح Python بتغيير بنية مثيل (بالإضافة إلى الفصل بأكمله) أثناء التشغيل من خلال مهمة بسيطة ، لذلك لا توجد حماية ضرورية. وبالتالي ، ليس مطلوبا التفكير كذلك. ومع ذلك ، هناك تناظرية للحالة المحمية - ضعف تسطير أسفل السطر قبل الاسم. ومع ذلك ، فإن هذه العملية تقوم ببساطة بتغيير المتغير / الاسم المرئي إلى _٪ ClassName٪ __٪ varname٪ الذي يسمح بالعمل مع البيانات المخفية.
  • لا ، ثابت الطبقات النهائية ، واجهات. هذا النموذج يعتمد على الكائنات في بيثون بشكل عام. بدلاً من Singleton ، من المحتمل أن يكون لديك ملف يحتوي على جميع الوظائف المطلوبة أو ملف يقوم بإرجاع نفس المثيل عند الاستيراد. بدلاً من الواجهة ، من المحتمل أن تقوم بإنشاء فئة تثير استثناءات للطرق التي لم يتم إعادة تعيينها لسبب ما (أي الحل ممكن).
  • ليس من المطلوب تطبيق البرمجة الموجهة للكائنات فقط (OOP). نظرًا لأن كل شيء كائن على أي حال (حتى منطقي) ولا يحتوي بناء الجملة على عوامل تشغيل مختلفة لاستدعاء طريقة أو وظيفة من ملف مدرج ، يتم إجراء جميع المكالمات مع مشغل الوصول ("."). وبالتالي ، فإن التغليف لا يتطلب بالضرورة OOP. لذلك ، في معظم المشاريع ، يتم إنشاء فصول حيث تكون مطلوبة حقًا.

أسلوب الترميز


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

ومع ذلك ، كانت هناك دائما العديد من الحجج عند الموافقة على هذه الوثيقة داخل الفريق. تؤثر هذه المشكلة على Python أيضًا ، ولكن بدرجة أقل ، نظرًا لوجود العديد من التوصيات من المتخصصين المؤهلين ، والتي ستكون بالتأكيد كافية لتبدأ بـ:

  • PEP 8 . توصيات من فريق تطوير Python وبرنامج فحص الأداة المساعدة الذي يحمل نفس الاسم.
  • توصيات من جوجل.

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

  • بدلاً من مكتبة الأسهم الكبيرة التي تحتوي على العديد من الوظائف التي تكرر بعضها جزئيًا ، نستخدم مجموعة أصغر من الطرق ومكتبات دمج إضافية (على سبيل المثال لمجاميع التجزئة).
  • بدلا من strlen والعد ، ونحن نستخدم دائما لين .

الخ

إصدارات بايثون


الإصدارات الجديدة من PHP متوافقة دائمًا مع الإصدارات السابقة ، على الرغم من أن التحسينات مطلوبة أحيانًا. من ناحية أخرى ، هناك Python 2 و Python 3 وهما غير متوافقين بشكل افتراضي. ومع ذلك ، في الآونة الأخيرة ، قام مطورو بيثون بتحسين الوضع بشكل كبير. يمكنك كتابة رمز لإصدارين من Python ، ولكن إذا كنت تستخدم ميزات Python 3 الجديدة مثل البرمجة غير المتزامنة أو ميزات Unicode الجديدة (UTF 8) ، فمن المحتمل أن تواجه صعوبات. ولهذا السبب ، فإن المشروعات التي تم تطويرها وترميزها بالفعل لعدة سنوات ، لا تزال تستخدم Python 2.

لكن بالنسبة للمشاريع الجديدة ، لا يوجد سبب لاستخدام بيثون 2.

الأسماء المستعارة عبر اللغات


في ما يلي قائمة بالكلمات الرئيسية التي توضح البديل الذي توفره Python للتكنولوجيا التي تستخدمها حاليًا.

  • الملحن -> نقطة
  • mod_php -> mod_wsgi
  • nginx + php-fpm -> nginx + uwsgi + uwsgi_python
  • daemon.io -> اعصار ، ملتوية
  • زند الإطار -> جانغو
  • فالكون -> الصقر

الخاتمة


كيف تعرف إذا كنت في حاجة إليها أم لا؟

  • كنت تعتقد أن أقوى الكتابة كان ذلك أفضل.
  • كنت تفضل لغة تتميز بهيكل جيد التنظيم.
  • أنت الكمال ، والتنوع المفرط يزعجك.
  • تبدو وظائف وظائف Python في مدينتك أكثر واعدة (أو تشعر بالملل من تطوير بوابات الويب فقط).
  • تريد أن تكون لغة البرمجة الرئيسية مناسبة لتطوير أي نوع من البرامج (مع مراعاة القيود المعقولة المتعلقة بالكتابة الديناميكية).
  • أنت لا تحب مستوى مهارة المطورين المبتدئين (بسبب منحنى التعلم المنخفض نسبياً).

طريقي لتعلم بيثون


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

  • الأسبوع الأول : اقرأ الغطس في بيثون ، الفصول 2-7. يمكنك الاطلاع على الفصول الأخرى لفترة وجيزة ، مع الانتباه إلى النقاط المثيرة للاهتمام فقط. في الوقت نفسه ، أكمل 10 مهام باستخدام Project Euler . أخيرًا ، أنشئ أداة مساعدة لوحدة تحكم تقبل المعلمات. يمكنك إما نقل أي من نصوص bash السابقة الخاصة بك ، أو إنشاء تمثيلي لـ ls من BusyBox ، أو أي شيء جديد. النقطة المهمة هي أن النص يجب أن يفعل شيئًا مفيدًا ، شيئًا تفعله كثيرًا. على سبيل المثال ، قمت بنقل أداة PHP الخاصة بي والتي يمكنها عرض البيانات في ذاكرة التخزين المؤقت للذاكرة.
  • الأسبوع الثاني : إنشاء تمثيلي بسيط من متوسط في جانغو والبندقية على أي استضافة. ضع في اعتبارك المكونات: التسجيل ، تسجيل الدخول ، استعادة كلمة المرور ، مشاركة المشاركات والتعليقات وإزالتها ، فحص أذونات الإجراءات.
  • الأسبوع الثالث : حدد شركة ترغب في العمل بها ، ثم أرسل سيرتك الذاتية لطلب مهمة اختبار Python لاختبار مهاراتك.

حظا سعيدا

Source: https://habr.com/ru/post/ar436180/


All Articles