سؤال

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

  1. سلاسل مستند فئة/طريقة كبيرة في التعليمات البرمجية الخاصة بك: هل تضيع الذاكرة عن طريق إنشاء كائنات السلسلة؟
  2. سلاسل مستند مستوى الوحدة النمطية: هل يتم تخزينها بلا حدود من قبل المترجم؟

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

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

المحلول

  • "أنا أفهم أنه في Python ، فإن السلسلة هي ببساطة تعبير وستكون سلسلة من تلقاء نفسها يتم جمعها فور إرجاع السيطرة إلى متصل الكود" يشير إلى سوء فهم ، على ما أعتقد. يتم تقييم docstring مرة واحدة (وليس على كل مكالمة وظيفة) ويبقى على قيد الحياة على الأقل طالما كانت الوظيفة.

  • "هل هذا مهم حتى؟" عندما يتعلق الأمر بالتحسين لا يتم الرد عليه من خلال التفكير في الأمر بشكل مجردة ولكن عن طريق القياس. "megabytes متعددة" من النص لا على الأرجح ليس كثيرًا في تطبيق كثافة في الذاكرة. من المحتمل أن يعيش الحل لإنقاذ الذاكرة في مكان آخر ويمكنك تحديد ما إذا كان هذا هو الحال عن طريق القياس.

  • بيثون -OO مفتاح سطر الأوامر يزيل docstrings.

نصائح أخرى

يتم الاحتفاظ Docstrings Python بشكل افتراضي إلى أجل غير مسمى ، حيث يمكن الوصول إليها من خلال سمة __doc__ لوظيفة أو وحدة. على سبيل المثال ، مع ما يلي في test.py:

"""This is a test module."""

def f():
   """This is a test function."""
   pass

ثم:

$ python
Python 2.5.1 (r251:54863, Oct 30 2007, 13:54:11) 
[GCC 4.1.2 20070925 (Red Hat 4.1.2-33)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import test
>>> test.__doc__
'This is a test module.'
>>> test.f.__doc__
'This is a test function.'
>>> 

ال -OO يبدو أن خيار المترجم المترجم يؤدي إلى إزالة المستند .pyo الملفات ، ولكن ليس لها تأثير أتوقع:

$ python -OO
Python 2.5.1 (r251:54863, Oct 30 2007, 13:54:11) 
[GCC 4.1.2 20070925 (Red Hat 4.1.2-33)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import test
>>> test.__file__
'/tmp/test.py'
>>> 
$ grep "This is a test" /tmp/test.pyo
Binary file /tmp/test.pyo matches
$ python -OO
Python 2.5.1 (r251:54863, Oct 30 2007, 13:54:11) 
[GCC 4.1.2 20070925 (Red Hat 4.1.2-33)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import test
>>> test.__file__
'/tmp/test.pyo'
>>> test.__doc__
'This is a test module.'
>>> 

وفي الواقع ، test.pyo ملف تم إنشاؤه مع -OO مطابق ل test.pyc تم إنشاء ملف مع عدم وجود وسيطات سطر الأوامر. هل يمكن لأي شخص أن يشرح هذا السلوك؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top