كيف يمكنني أن أفعل كسر خط (خط استمرار) في الثعبان ؟

StackOverflow https://stackoverflow.com/questions/53162

سؤال

لدي سلسلة طويلة من التعليمات البرمجية التي أريد الانفصال بين خطوط متعددة.ماذا أفعل وما هو syntax ؟

على سبيل المثال ، إضافة مجموعة من السلاسل ،

e = 'a' + 'b' + 'c' + 'd'

ويكون ذلك في سطرين هكذا:

e = 'a' + 'b' +
    'c' + 'd'
هل كانت مفيدة؟

المحلول

ما هو الخط ؟ هل يمكن أن يكون مجرد حجج على السطر التالي دون أي مشاكل:

a = dostuff(blahblah1, blahblah2, blahblah3, blahblah4, blahblah5, 
            blahblah6, blahblah7)

وإلا يمكنك أن تفعل شيئا مثل هذا:

if a == True and \
   b == False

التحقق دليل نمط للحصول على مزيد من المعلومات.

من المثال الخاص بك خط:

a = '1' + '2' + '3' + \
    '4' + '5'

أو:

a = ('1' + '2' + '3' +
    '4' + '5')

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

نصائح أخرى

من دليل نمط لل كود بايثون:

الطريقة المفضلة من التفاف طوابير طويلة باستخدام بايثون ضمنا استمرار خط داخل الأقواس المعقوفة و الأقواس. طوابير طويلة لا يمكن كسرها عبر خطوط متعددة من خلال التفاف التعبير بين قوسين.هذه ينبغي أن تستخدم بدلا من استخدام خط مائل عكسي متابعة سطر.

الخطوط المائلة العكسية قد لا يكون مناسبا في بعض الأحيان.على سبيل المثال, طويل, متعددة مع البيانات لا يمكن استخدام ضمنا استمرار لذا الخطوط المائلة العكسية مقبولة:

with open('/path/to/some/file/you/want/to/read') as file_1, \
        open('/path/to/some/file/being/written', 'w') as file_2:
    file_2.write(file_1.read())

هذه قضية أخرى هي مع تأكيد البيانات.

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

class Rectangle(Blob):

    def __init__(self, width, height,
                 color='black', emphasis=None, highlight=0):
        if (width == 0 and height == 0 and
                color == 'red' and emphasis == 'strong' or
                highlight > 100):
            raise ValueError("sorry, you lose")
        if width == 0 and height == 0 and (color == 'red' or
                                           emphasis is None):
            raise ValueError("I don't think so -- values are %s, %s" %
                             (width, height))
        Blob.__init__(self, width, height,
                      color, emphasis, highlight)

تحرير:PEP8 الآن توصي عكس الاتفاقية (كسر في الثنائية العمليات) المستخدمة من قبل الرياضيين و ناشريها لتحسين إمكانية القراءة.

دونالد كانوث أسلوب كسر قبل عامل تشغيل ثنائي تؤيد مشغلي عموديا ، وبالتالي تقليل العين عبء العمل عند تحديد العناصر التي تضاف تطرح.

من PEP8:يجب أن خط فاصل قبل أو بعد الثنائية المشغل ؟ :

دونالد كانوث يشرح القاعدة التقليدية في أجهزة التنضيد سلسلة:"على الرغم من أن الصيغ ضمن فقرة دائما بعد كسر الثنائية العمليات و العلاقات عرض الصيغ دائما قبل كسر الثنائية العمليات"[3].

بعد تقليد من الرياضيات عادة النتائج في أكثر قابلية للقراءة كود:

# Yes: easy to match operators with operands
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

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

[3]:دونالد كانوث هو TeXBook الصفحات 195 و 196

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

ترى الثعبان التعابير المناهضة التعابير (على بيثون 2 أو بيثون 3) للمزيد.

وضع \ في نهاية الخط الخاص بك أو أرفق البيان في parens ( .. ).من IBM:

b = ((i1 < 20) and
     (i2 < 30) and
     (i3 < 40))

أو

b = (i1 < 20) and \
    (i2 < 30) and \
    (i3 < 40)

يمكنك كسر خطوط بين parenthesises و الأقواس.بالإضافة إلى ذلك, يمكنك إلحاق حرف الخط المائل العكسي \ إلى خط صراحة كسرها:

x = (tuples_first_value,
     second_value)
y = 1 + \
    2

من فم الحصان: صراحة الخط الانضمام

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

if 1900 < year < 2100 and 1 <= month <= 12 \
   and 1 <= day <= 31 and 0 <= hour < 24 \
   and 0 <= minute < 60 and 0 <= second < 60:   # Looks like a valid date
        return 1

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

قد لا يكون pythonic الطريقة ولكن أنا عموما استخدام قائمة مع الانضمام إلى وظيفة كتابة سلسلة طويلة مثل استعلامات SQL.

query = " ".join([
    'SELECT * FROM "TableName"',
    'WHERE "SomeColumn1"=VALUE',
    'ORDER BY "SomeColumn2"',
    'LIMIT 5;'
])

مأخوذ من دليل المسافر إلى بيثون (خط استمرار):

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

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

ومع ذلك, ، في أكثر الأحيان لا وجود لتقسيم خط المنطقي هو علامة على أن كنت تحاول أن تفعل الكثير من الأشياء في نفس الوقت ، والتي قد تعيق القراءة.

بعد أن قال ، وهنا مثال فيما يتعلق متعددة الواردات (عندما تتجاوز خط حدود المعرفة على بيب-8):

from app import (
    app, abort, make_response, redirect, render_template, request, session
)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top