Python2 العد التنازلي، لا تأتي من السيطرة على ميزات جديدة Python3 بارد؟ | برنامج القوة

الكاتب | مذكرات بحوث التكنولوجيا الزاحف الغيمة

ذبيان | قوه روي

أنتجت | CSDN بلوق

أصدرت Python3.8 شهر تقريبا، من Python3.0 الإصدار الأول سيكون أكثر من 10 عاما. اعتقد كثير من الناس لا يزال في الإصدار استخدام Python2.7، وتريد أن تهاجر إلى الإصدار الأحدث ولكن لا نعرف كيفية السيطرة بسرعة الطريقة الأكثر مذهلة.

المقالة التالية، وسوف تعطيك يوصي الإصدار 3.0 وظائف تعتمد معظم العصرية وبناء الجملة، حتى تتمكن من "تبرز" في وقت مراجعة القانون!

مقدمة

أولا، دعونا يتحدث الوقت عدة نقاط:

  • Python2.7 توقفت رسميا وقت الصيانة 1 يناير 2020، وهناك منذ أكثر من شهر واحد

  • Python3.8 بدأ نشر 14 أكتوبر 2019، قبل أكثر من شهر واحد

من هذين الرقمين يمكننا أن نرى، وقد وضعت Python3 النسخة كبيرة لفترة طويلة، في حين من نهاية Python2.7 أيضا الحصول على أقرب. مسافة التوقف في السنة صيانة Python2.7، والكثير من المشاريع مفتوحة المصدر جيدة قد توقفت بالفعل دعم 2.7، على سبيل المثال، إلى يناير من هذا العام، نمباي سوف تتوقف عن دعم بايثون 2، وبحلول نهاية هذا العام، Ipython، Cython والباندا، وما إلى ذلك، واحدا تلو الآخر لوقف دعم بايثون 2.

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

كتابة جميع الأمثلة في بيثون 3.7 البيئة من كل الأمثلة المميزة تعطى من الحد الأدنى المطلوب إصدار بيثون عملهم العادي.

تدفق المد والجزر

  • سلسلة التنسيق و السلسلة (أدنى بيثون الإصدار 3.6)

"كيفية سلسلة التنسيق" هذا هو موضوع وأعتقد أن كل مطور في وقت الاتصال مع إرادة التعلم اللغوي ولغة جديدة، وطريقة في شكل بيثون تركيب نميل عادة إلى [تنسيق] أو [ S] هاتين الطريقتين، على النحو التالي:

طباعة ( "اسمي هو s" ( 'phithon'،)) طباعة ( "اسمي (الاسم) الصورة" { 'اسم': 'phithon'}) طباعة ( "اسمي {}". شكل ( "بوب")) طباعة ( "اسمي {الاسم}". شكل (اسم = "بوب"))

قبل إصدار Python3.6، قدمنا طريقة جديدة لسلسلة مرنة تنسيقها [] و سلسلة، وذلك باستخدام {} و سلسلة فوق نفس الوظيفة الترميز هو مثل ما يلي:

اسم = "بوب" طباعة (و "اسمي {الاسم}")

قارنا العديد من هذه شكل سلسلة، يمكن العثور بالمقارنة مع شكل سلسلة أحرف المشترك [ S] أو [طريقة] تنسيق، يظهر [] متغير و سلسلة أكثر ملاءمة لإدراج مباشرة في العنصر النائب، أيضا فهم أفضل، حول تنسيق سرعة يمكن الرجوع إلى هذا بلوق (HTTPS: // ستاكوفيرفلوو كوم / أسئلة / 56587807 / لماذا، هي، و السلاسل، أسرع من-شارع إلى تحليل القيم) لرؤية شرح مفصل.

  • مكتبة الإدارة مسار Pathlib (الحد الأدنى بيثون الإصدار 3.4)

كما يمكن أن يرى من الخصائص السابقة [و سلسلة] قوية حقا وجميلة، ولكن من حيث مسار الملف، بيثون اتبع فلسفة تنميتها: كل شيء هو كائن، لذلك يقومون بها دربه جلبت أيضا إلى كائن مسار واحد مكتبة، وهي عملية من مكتبة التجريد مسار الملف] [pathlib. إذا كنت لا تعرف لماذا يجب عليك استخدام [pathlib]، راجع بلوق التالية وظيفة في هذه العصي الدجاج التي تري هنر (HTTPS إعداد: // treyhunner كوم / 2018/12 لماذا أولا يجب أن يكون بين باستخدام-pathlib /) والإصدارات اللاحقة /.

دعونا مقارنة نسختين من نفس لتحقيق القضايا القديمة والجديدة من بيثون:

من غلوب غلوب استيراد file_contents = لاسم الملف في غلوب (، العودية = صحيح "** / * الحمر. '): مع فتح (اسم الملف) كما python_file: file_contents. التطبيق نهاية (python_file.read) من pathlib مسار استيراد file_contents = S ')

كما هو مبين أعلاه، يمكنك read_text استخدام وفهم من قائمة كائن مسار، محتويات الملف للقراءة في قائمة جديدة، مقارنة تستخدم نسخة قديمة من بيثون يدرك بلا شك أفضل في قواعد اللغة وجميلة!

  • اكتب موجه نوع ملمحا (الحد الأدنى بيثون الإصدار 3.5)

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

مواطنه print_yes_or_no (codition: شارع) - >  منطقي: مرر
  • تعداد (الحد الأدنى بيثون الإصدار 3.4)

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

# ساو نوع العملية باستخدام فئة الذاتي مواطنه تعداد (تتضمن التعدادات **): نوع تعيده ( "أن التعداد '،، تتضمن التعدادات) أرقام = التعداد (واحد = 1، اثنين = 2، THREE = 'ثلاثة') # Numbers.ONE == 1، Numbers.TWO == 2 و Numbers.THREE == 'ثلاثة' # اكتب باستخدام النفس الطبقة عرض ترقية التشغيل مواطنه التعداد (متسلسلة *، ** اسمه): تتضمن التعدادات = ديكت (الرمز البريدي (متسلسل، ومجموعة (ليون (متتابعة))) **، اسمه) نوع تعيده ( "أن التعداد '،، تتضمن التعدادات) أرقام = التعداد ( 'ZERO'، 'واحد'، 'الثاني') # Numbers.ZERO == 0 وNumbers.ONE == 1 # مع قيمة أن يكون تعيين اسم مواطنه التعداد (متسلسلة *، ** اسمه): تتضمن التعدادات = ديكت (الرمز البريدي (متسلسل، ومجموعة (ليون (متتابعة))) **، اسمه) عكس = ديكت ((قيمة المفتاح) لمفتاح، قيمة في enums.iteritems) تتضمن التعدادات < 'reverse_m التطبيق جي '> = العكس نوع تعيده ( "أن التعداد '،، تتضمن التعدادات) # Numbers.reverse_m التطبيق جي == 'ثلاثة' # وعلاوة على ذلك، تنفيذها باستخدام namedtuple من مجموعات namedtuple استيراد مواطنه التعداد (* مفاتيح): العودة namedtuple ( 'التعداد، مفاتيح) (مفاتيح *) MyEnum = التعداد ( 'فو'، 'BAR'، 'BAZ') # أحرف مع الخرائط الرقمية، مثل C / C ++ مواطنه التعداد (* مفاتيح): العودة namedtuple ( 'التعداد، مفاتيح) (* مجموعة (ليون (مفاتيح))) # مع القاموس رسم الخرائط يمكن تعيين أنواع مختلفة، فإنه لا يقتصر على رقمي مواطنه التعداد (kwargs **): العودة namedtuple ( 'التعداد، kwargs.keys) (kwargs.values *)

شهدت أكثر من ذلك بكثير من عرض هذه العملية، الآن Python3 تعطيك تنقية عينيك، Python3.4 الجديد طريقة بسيطة لإعداد التعداد حسب الفئة "التعداد".

من استيراد التعداد التعداد، والسيارات الطبقة الوحش (التعداد): ZOMBIE = السيارات WARRIOR = السيارات BEAR = السيارات طباعة (Monster.ZOMBIE) لأنني في الوحش: طباعة (ط) # Monster.ZOMBIE # Monster.ZOMBIE # Monster.WARRIOR # Monster.BEAR

سبق يمكننا أن نرى أن التعداد هو عبارة عن مجموعة من اسم رمزي (عضوا)، والتي هي اسم رمزي ولا بد القيم فقط ثابتة معا. في التعداد، عملية يمكن مقارنة الأعضاء من خلال تحديد وحصر نفسه يمكن أيضا أن اجتاز.

  • مخبأ LRU الأصلي (الحد الأدنى بيثون الإصدار 3.2)

التخزين المؤقت وسوف يتم استخدام كل ميزة في التنمية، إذا أردنا استخدام دقيق، إذ هو جيد، وأنه سيوفر لنا الكثير من الوقت والمال. في اعتقادي، عند كثير من الناس سوف تبدأ في تعلم الديكور بيثون لتحقيق الديكور التخزين المؤقت لإنقاذ حساب الوقت فيبوناتشي وظيفة. ولكن بعد بيثون 3 سوف LRU (الأقل استخداما مؤخرا خوارزمية) مخبأ كما الديكور يسمى "lru_cache"، والاستفادة من ذاكرة التخزين المؤقت هو بسيط جدا.

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

الوقت استيراد مواطنه أكذوبة (رقم: دولي) - >  الباحث: إذا كان رقم == 0: العودة 0 إذا كان رقم == 1: العودة 1 عودة أكذوبة (رقم 1) + أكذوبة (رقم 2) بدء = time.time أكذوبة (40) طباعة (f'Duration: {time.time - بداية} الصورة ') # المدة: 30 .684099674224854s

لقد رأينا، والوقت لا طائل منه عندما كنا تخزين يتم احتساب الديكور 30 ثانية أو نحو ذلك، والآن، يمكننا استخدام "lru_cache" لتحسين ذلك (ويسمى هذا الأسلوب الأمثل "التحفيظ"). قبل هذا التحسين، فإننا سوف يقلل من وقت التنفيذ من بضع ثوان إلى بضع نانو ثانية.

من functools lru_cache استيراد lru_cache (ماكس سايز = 512) fib_memoization صفر (رقم: دولي) - >  الباحث: إذا كان رقم == 0: العودة 0 إذا كان رقم == 1: العودة 1 عودة fib_memoization (رقم 1) + fib_memoization (رقم 2) بدء = time.time fib_memoization (40) طباعة (f'Duration: {time.time - بداية} الصورة ') # المدة: 6.866455078125e-05S

ويمكن أن يرى كم نحن زيادة تكلفة استخدام وسائل التخزين المؤقت وظيفة الديكور في تطوير الحوسبة الوقت، بالإضافة إلى ذلك، بعد إصدار Python3.8 جديدة، lru_cache الآن أن تستخدم مباشرة والديكور بدلا من أن تكون وظيفة عودة الديكور. لذلك هما الكتابة الآن الدعم:

lru_cache الط صفر (س): ... lru_cache (ماكس سايز = 256) الط صفر (س): ...
  • مددت تفريغ iterable (الحد الأدنى بيثون الإصدار 3.0)

بيثون فك يؤمنون دينا المبتدئين الثعبان عندما يكون لديك لفهم، إذا اغتنمنا هذه الميزة كثيرا، وأعتقد أنه شيء رائع جدا. ما الموسعة فك ذلك؟ يمكننا أن نتعلم أكثر من pep3132، على سبيل المثال:

# بيثون 3.4 في وظيفة الطباعة لا تسمح عمليات متعددة * > > >  طباعة (* * ) ملف " < ستدين > "الخط 1 طباعة (* * ) ^ خطأ قواعدي: بناء جملة غير صالح > > > # نظرة على python3.5 أو في وقت لاحق # يمكن أن تستخدم أي عدد وافر من تفريغ التشغيل > > >  طباعة (* * ، 3) 123 > > >  * مجموعة (4)، 4 (0، 1، 2، 3، 4) > > >   > > >  {* مجموعة (4)، (4)} {0، 1، 2، 3، 4} > > >  { 'X': 1، ** { 'ص': 2}} { 'X': 1، 'ذ': 2}

يمكننا أن نرى أن هذه العملية يمكن اعتبار فك بيثون في اللعب أنيقة بشكل لا يصدق، ولعب جيدة من ناحية التفريغ، سوف تظهر تتحول حقا آه جمهور!

  • الطبقة الديكور البيانات (الحد الأدنى بيثون الإصدار 3.7)

بيثون 3.7 قدم الطبقة البيانات []، وميزات جديدة جدا يبسط يعرف مقدار رمز الفئة الكائن، رمز بسيط وواضح. باستخدام فئة تصميم تعديلdataclass الديكور يمكن استخدامه للحد من استخدام رمز المتداول، لأن الديكور سوف تولد تلقائيا، مثل "__init__" وأساليب خاصة مثل "__repr__". في وثيقة رسمية، تم وصفها على أنها "اسم المتغير مع الصفوف القيمة الافتراضية".

من dataclasses dataclass استيراد dataclass الطبقة DataClassCard: رتبة: شارع دعوى: شارع # توليد أمثلة queen_of_hearts = DataClassCard ( 'Q'، 'قلوب') طباعة (queen_of_hearts.rank) طباعة (queen_of_hearts) طباعة (queen_of_hearts == DataClassCard ( 'Q'، 'قلوب')) #Q #DataClassCard (رتبة = 'Q'، دعوى = 'قلوب') #True

الطبقات العادية، وفقا بناء الجملة مشابهة لهذه قبل 3.7 بيثون:

فئة RegularCard صفر __init__ (الذاتي، ورتبهم، ودعوى) : self.rank = رتبة self.suit = دعوى queen_of_hearts = RegularCard ( 'Q'، 'قلوب') طباعة (queen_of_hearts.rank) طباعة (queen_of_hearts) طباعة (queen_of_hearts == RegularCard ( 'Q'، 'قلوب')) # 'Q' # < __main __. الكائن RegularCard في 0x7fb6eee35d 30 > #False

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

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

الطبقة RegularCard (كائن): صفر __init__ (الذاتي، ورتبهم، ودعوى) : self.rank = رتبة self.suit = دعوى صفر __repr__ (الذات) : # يمكن طباعة المعلومات الدرجة من عودة (و '{النفس .__ الطبقة __.__ name__} و "(رتبة = {self.rank! ص}، دعوى = {self.suit! ص}) ') # يمكننا أن نحاول "! R" لإزالة أو تغييرها أو إلى s ص لذلك، نلقي نظرة على ما يحدث لإخراج # تحويل الحرف: من المتوقع الصورة '،' ص '، أو' ' صفر __eq__ (الذاتي، وغيرها) : # يمكن مقارنة ما إذا كانت نفس الفئة (بغض النظر عن عنوان الذاكرة) إذا الآخر .__ class__ ليس النفس .__ class__: عودة NotImplemented عودة (self.rank، self.suit) == (other.rank، other.suit)
  • حزمة مساحة الضمني (الحد الأدنى بيثون الإصدار 3.3)

ملف التعليمات البرمجية بايثون النهج التنظيمي لتغليف لهم في حزمة (التي تحتوي على مجلد "init.py"). هنا مثال من الوثائق الرسمية المقدمة:

الصوت / أعلى مستوى حزمة __init__.py تهيئة حزمة الصوت صيغ / حزمة فرعية للتحويل صيغة الملف __init__.py wavread.py wavwrite.py aiffread.py aiffwrite.py auread.py auwrite.py. .. آثار / حزمة فرعية للمؤثرات صوتية __init__.py echo.py surround.py reverse.py ... مرشحات / حزمة فرعية للمرشحات __init__.py equalizer.py vocoder.py karaoke.py ...

في بايثون 2، فوق كل مجلد يجب أن يحتوي على مجلد في ملف حزمة بايثون "init.py". في بيثون 3، مع إدخال حزمة ضمنا مساحة الاسم، الملف لم يعد لا بد منه.

الصوت / أعلى مستوى حزمة __init__.py تهيئة حزمة الصوت صيغ / حزمة فرعية للتحويل صيغة الملف wavread.py wavwrite.py aiffread.py aiffwrite.py auread.py auwrite.py ... آثار / حزمة فرعية للمؤثرات صوتية echo.py surround.py reverse.py ... مرشحات / حزمة فرعية للمرشحات equalizer.py vocoder.py karaoke.py ...

كما يقول بعض الناس، والمهمة ليست بسيطة كما جاء في المقال، المسؤول ثيقة "PEP 420 مواصفات"، وأشار إلى أن حزمة التقليدية لا تزال بحاجة إلى "init.py" لإزالته من مجلد سيصبح المجلد حزمة مساحة الاسم المحلية، والتي ستجلب بعض قيود إضافية. حزمة مساحة الاسم المحلية من الوثائق الرسمية يعطي مثالا جيدا، وأوضح أن جميع القيود.

ملخص

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

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

مشى رجل الطريق التكنولوجيا من الصعب جدا؟

القدرة على لعب ديبو؟

لم يتم كشفها نوعية المواد؟

لا تقلق،

تبدأ على الفور، وسوف CSDN تحقيق الابتكار والإبداع لإنشاء عرض الخاص بك وتصبح مرحلة كبيرة،

تحت مسح كود Fanger وي، مرحبا بكم في "برنامج القوة" CSDN!

الإقامة الإقامة في وزير العقل

7000 سنة ضوئية بعيدا عن المنطقة، وتقف على إنشاء منصب ملايين السنين لا تقع، في انتظار حول الكوكب

تظهر بالقرب من الشمس وجوه مضيئة ضخمة، يمكن لهذه الأجسام الغريبة حرية الوصول إلى الشمس؟

CNN: أنقذت الحكومة الصينية مئات الآلاف من الأرواح

TPC-C تفوقت في OceanBase أوراكل، 11 مزدوجة مقبض الذروة من 61 مليون مرة / ثانية

"سونيك" العمل والعيش فيلم أو إعادته تكلفة 35 مليون $

استعرض هذه المواصفات، الأصلي ذكي الحوسبة إلى الأمام الباب حتى بسيطة

سيدة M في أول متجر مدينة المقبل نينغبو، 26 نوفمبر لاول مرة يينزهو الانطباع من المدينة

30 عاما، تغيرات هائلة لون الأرض

علمتك كيف الروبوت التعرف على الوجه لتسجيل الدخول! | برنامج القوة

تفسير الخبراء الخبرة للتعامل مع التحديات والأفكار IIoT 15 عاما

"نحو السكك الحديدية عالية السرعة"، أول الترويج السياحي أشعة الشمس الخاصة بهم في تيانجين