পাইথনে আমি কীভাবে একটি লাইন ব্রেক (লাইন ধারাবাহিকতা) করতে পারি?


1074

আমার কাছে কোডের একটি দীর্ঘ লাইন রয়েছে যা আমি একাধিক লাইনের মধ্যে ব্রেক আপ করতে চাই। আমি কী ব্যবহার করব এবং সিনট্যাক্সটি কী?

উদাহরণস্বরূপ, একটি গুচ্ছ স্ট্রিং যুক্ত করা,

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

এবং এটি দুটি লাইনে রাখুন:

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

উত্তর:


1209

লাইন কি? কোনও সমস্যা ছাড়াই আপনার কেবল পরবর্তী লাইনে যুক্তি থাকতে পারে:

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')

নোট করুন যে স্টাইল গাইড বলেছেন যে প্রথম বন্ধনীগুলির সাথে অন্তর্নিহিত ধারাবাহিকতা ব্যবহার করা পছন্দ করা হয় তবে এই বিশেষ ক্ষেত্রে আপনার অভিব্যক্তিটির চারপাশে কেবল প্রথম বন্ধন যুক্ত করা সম্ভবত যাওয়ার ভুল উপায়।


35
আসলে, আপনার স্টাইল গাইডের পছন্দটি ঠিক পিছনের দিকে back অন্তর্নিহিত ধারাবাহিকতাটিকে প্রাধান্য দেওয়া হয়, সুস্পষ্ট ব্যাকস্ল্যাশ কেবল প্রয়োজনে ব্যবহৃত হয়।
কার্ল মায়ার

35
কার্ল: আমি একমত নই, এটি গাইডের কাছ থেকে: দীর্ঘ লাইন মোড়ানোর পছন্দের উপায়টি হল বন্ধনী, বন্ধনী এবং ধনুর্বন্ধনীগুলির মধ্যে পাইথনের অন্তর্নিহিত লাইন ধারাবাহিকতা ব্যবহার করা। যদি প্রয়োজন হয় তবে আপনি একটি এক্সপ্রেশনের চারপাশে একটি অতিরিক্ত জুড়ি যুক্ত করতে পারেন তবে কখনও কখনও ব্যাকস্ল্যাশ ব্যবহার করে আরও ভাল দেখায় looks
জেরুব

15
স্টাইল গাইডের উদ্ধৃতিটির মূল অংশটি "যদি প্রয়োজন হয় তবে আপনি একটি অভিব্যক্তিটির চারপাশে একটি অতিরিক্ত জুটি বন্ধন যুক্ত করতে পারেন, তবে কখনও কখনও ব্যাকস্ল্যাশ ব্যবহার করে আরও ভাল দেখায়।" স্টাইল গাইডটি বলছে না যে আপনার প্রথম বন্ধনী যুক্ত করা উচিত , এটি এটি লেখকের বিচারে ছেড়ে যায়।
টনি মায়ার

23
সম্ভবত এই মন্তব্যগুলি যুক্ত হওয়ার পরে পিইপি -8 পরিবর্তিত হয়েছে, এখন এটি স্পষ্টভাবে স্পষ্ট যে লম্বা রেখাগুলি মোড়ানোর জন্য প্রথম বন্ধনী যুক্ত করা উচিত: "বন্ধনীগুলিতে এক্সপ্রেশনকে মোড়কে একাধিক লাইনে দীর্ঘ লাইনগুলি ভেঙে ফেলা যেতে পারে।"
ড্যানিয়েল

46
পিইপি 8 সত্যিই 2010 সালে পরিবর্তিত হয়েছিল - "কখনও কখনও ব্যাকস্ল্যাশ ব্যবহার করা আরও ভাল দেখায়" চলে গেছে।
e100

230

পিইপি 8 থেকে - পাইথন কোডের জন্য স্টাইল গাইড :

দীর্ঘ লাইনের মোড়কের পছন্দের উপায়টি হল বন্ধনী, বন্ধনী এবং ধনুর্বন্ধনীগুলির মধ্যে পাইথনের অন্তর্নিহিত লাইন ধারাবাহিকতা ব্যবহার করা। বন্ধনীগুলিতে এক্সপ্রেশনকে মোড়ানো করে একাধিক লাইনে দীর্ঘ লাইনগুলি ভাঙ্গা যায়। এগুলি লাইনের ধারাবাহিকতার জন্য ব্যাকস্ল্যাশ ব্যবহারের অগ্রাধিকার হিসাবে ব্যবহার করা উচিত।

ব্যাকস্ল্যাশগুলি মাঝে মাঝে উপযুক্ত হতে পারে। উদাহরণস্বরূপ, দীর্ঘ, একাধিক স্টেটমেন্টগুলি অন্তর্নিহিত ধারাবাহিকতা ব্যবহার করতে পারে না, তাই ব্যাকস্ল্যাশগুলি গ্রহণযোগ্য:

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())

এ জাতীয় আরও একটি ঘটনা দৃsert় বিবৃতি দিয়ে।

অবিরত লাইনে যথাযথভাবে ইনডেন্ট করা নিশ্চিত করুন। বাইনারি অপারেটরের চারপাশে ভাঙ্গার পছন্দসই জায়গা অপারেটরের পরে , তার আগে নয়। কিছু উদাহরণ:

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)

পিইপি 8 এখন গণিতবিদ এবং তাদের প্রকাশকদের পাঠযোগ্যতার উন্নতির জন্য ব্যবহৃত বিপরীত কনভেনশন (বাইনারি অপারেশনগুলিতে বিরতি জন্য) সুপারিশ করেছে ।

বাইনারি অপারেটরের আগে ডোনাল্ড নুথের ভাঙার স্টাইল অপারেটরগুলিকে উল্লম্বভাবে সারিবদ্ধ করে, এইভাবে কোন আইটেম যুক্ত করা হয় এবং বিয়োগ হবে তা নির্ধারণ করার সময় চোখের কাজের চাপ হ্রাস করে।

পিইপি 8 থেকে : বাইনারি অপারেটরের আগে বা পরে কোনও লাইন ব্রেক হওয়া উচিত? :

ডোনাল্ড নুথ তাঁর কম্পিউটার এবং টাইপসেটিং সিরিজের প্রচলিত নিয়মটি ব্যাখ্যা করেছেন: "যদিও বাইনারি অপারেশন এবং সম্পর্কের পরে অনুচ্ছেদে থাকা সূত্রগুলি সর্বদা ভেঙে যায়, বাইনারি অপারেশনের আগে প্রদর্শিত সূত্রগুলি সর্বদা ভেঙে যায়" [৩]।

গণিত থেকে traditionতিহ্য অনুসরণ করলে সাধারণত আরও পঠনযোগ্য কোড আসে:

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

পাইথন কোডে, বাইনারি অপারেটরের আগে বা পরে ব্রেক করার অনুমতি রয়েছে, যতক্ষণ না স্থানীয়ভাবে কনভেনশন নিয়মিত থাকে। নতুন কোডের জন্য নুথের স্টাইলটি প্রস্তাবিত।

[3]: ডোনাল্ড নুথের দ্য টেক্সবুক, পৃষ্ঠা 195 এবং 196


3
এনবি সুপারিশটি ২০১০ সালে পরিবর্তিত হয়েছে: "লম্বলাইনগুলি ভাঙ্গা যায় ... বন্ধনীগুলিতে এক্সপ্রেশনকে মোড়ানো দ্বারা These এগুলি একটি ব্যাকস্ল্যাশ ব্যবহারের অগ্রাধিকার হিসাবে ব্যবহার করা উচিত ...", এবং সমস্ত ব্যাকস্ল্যাশগুলি কোড উদাহরণ থেকে সরিয়ে দেওয়া হয়েছিল।
e100

1
@ e100: উপরের গা bold়ভাবে পাঠ্যটি পড়ুন: The preferred way .. is by using Python's implied line continuation inside parenthesesএটি একই জিনিস by wrapping expressions in parentheses। আমি উদাহরণ আপডেট করেছি
jfs

10
তবে মনে রাখবেন যে "কখনও কখনও ব্যাকস্ল্যাশ ব্যবহার করা আরও ভাল দেখায়" খুব বেশি চলে গেছে।
e100


6
ডোনাল্ড নথের পাঠযোগ্যতার বোধগম্য উন্নতির কারণে গবেষণার পরে বাইনারি অপারেটরদের সামনে ব্রেকিং পছন্দ করতে 2015 সালে স্টাইল গাইডটি আপডেট করা হয়েছিল ।
জে

70

একটি লাইন শেষ করতে ব্যাকস্ল্যাশ ব্যবহারে বিপদটি হ'ল যদি ব্যাকস্ল্যাশের পরে যদি হোয়াইটস্পেস যোগ করা হয় (যা অবশ্যই দেখা খুব কঠিন) তবে ব্যাকস্ল্যাশটি আপনি যা ভেবেছিলেন তা এখন আর করছে না।

পাইথন আইডিয়ামস এবং অ্যান্টি-আইডিয়ামগুলি ( পাইথন 2 বা পাইথন 3 এর জন্য) আরও দেখুন।


8
এটি হ'ল এক কারণ যা হ'ল স্পেসকে আরও ভালভাবে দেখতে পারা ভাল লাগল; যেমন set list listchars=trail:·ভিমে মত কিছু । :)
Beau

25

\আপনার লাইনের শেষে একটি রাখুন বা পেরেন্সে বিবৃতিটি বন্ধ করুন ( .. )আইবিএম থেকে :

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

অথবা

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

24

আপনি প্রথম বন্ধনী এবং ধনুর্বন্ধনী মধ্যে লাইন ভাঙ্গতে পারেন। অতিরিক্তভাবে, আপনি ব্যাকস্ল্যাশ অক্ষরটি \স্পষ্টভাবে ব্রেক করার জন্য একটি লাইনে যুক্ত করতে পারেন:

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

20

ঘোড়ার মুখ থেকে: সুস্পষ্ট লাইন যোগদান

ব্যাকস্ল্যাশ অক্ষর ( \) ব্যবহার করে দুটি বা ততোধিক দৈহিক রেখা যুক্তিযুক্ত লাইনে যুক্ত হতে পারে : যখন কোনও শারীরিক রেখা ব্যাকস্ল্যাশে শেষ হয় যা কোনও স্ট্রিং আক্ষরিক বা মন্তব্যের অংশ নয়, তখন এটি যুক্ত হয়ে একটি একক যৌক্তিক লাইন তৈরি করে , ব্যাকস্ল্যাশ এবং নিম্নলিখিত প্রান্তের লাইন অক্ষর মুছে ফেলা হচ্ছে। উদাহরণ স্বরূপ:

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

ব্যাকস্ল্যাশ-এ শেষ হওয়া একটি লাইন কোনও মন্তব্য রাখতে পারে না। একটি ব্যাকস্ল্যাশ কোনও মন্তব্য চালিয়ে যায় না। ব্যাকস্ল্যাশ স্ট্রিং লিটারাল ব্যতীত একটি টোকেন চালিয়ে যায় না (অর্থাত, স্ট্রিং ল্যাটারাল ব্যতীত অন্য টোকেনগুলি ব্যাকস্ল্যাশ ব্যবহার করে শারীরিক রেখায় বিভক্ত করা যায় না)। একটি ব্যাকস্ল্যাশ স্ট্রিং আক্ষরিকের বাইরে একটি লাইনে অন্যত্র অবৈধ।


7
-1 কারণ উদাহরণ ইউনিডিয়োম্যাটিক আইএমও। যৌগিক শর্তসাপেক্ষীর পরিবর্তে একেবারে বন্ধনী বন্ধনী থাকতে পারে, যা আরও ব্যবহারিক (সম্পাদনা বা স্বয়ংক্রিয় পুনরায় মোড়ানোর জন্য) এবং ইডিয়োম্যাটিক।
u0b34a0f6ae

4

এটি পাইথোনিক উপায় নাও হতে পারে তবে আমি সাধারণত এসকিউএল কোয়েরির মতো দীর্ঘ স্ট্রিং লেখার জন্য জোড় ফাংশন সহ একটি তালিকা ব্যবহার করি:

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

2

দ্য হিথিকার গাইড থেকে পাইথন ( লাইন ধারাবাহিকতা ) পর্যন্ত নেওয়া:

কোডের একটি লজিকাল লাইন যখন স্বীকৃত সীমাটির চেয়ে দীর্ঘ হয়, আপনাকে এটিকে একাধিক শারীরিক লাইনের উপর বিভক্ত করতে হবে। লাইনের শেষ অক্ষর ব্যাকস্ল্যাশ হলে পাইথন ইন্টারপ্রেটার একটানা লাইনে যোগ দেবে। এটি কিছু ক্ষেত্রে সহায়ক, তবে এটির ভঙ্গুরতার কারণে সাধারণত এড়ানো উচিত: ব্যাকস্ল্যাশ পরে লাইনের শেষে যুক্ত একটি সাদা স্থান কোডটি ভেঙে দেবে এবং অপ্রত্যাশিত ফলাফল হতে পারে।

আরও ভাল সমাধান হ'ল আপনার উপাদানগুলির চারপাশে বন্ধনী ব্যবহার করা। বন্ধনী বন্ধ না হওয়া অবধি পাইথন ইন্টারপ্রেটারটি পরের লাইনে একটি অনাহীন বন্ধনী যুক্ত রেখে পরবর্তী লাইনে যোগ দেবে। একই আচরণটি কোঁকড়ানো এবং বর্গাকার ধনুর্বন্ধনী জন্য ধারণ করে।

তবে প্রায়শই না করা, দীর্ঘ যৌক্তিক লাইনকে বিভক্ত করা এমন একটি চিহ্ন যা আপনি একই সাথে অনেকগুলি কাজ করার চেষ্টা করছেন যা পাঠযোগ্যতা বাধাগ্রস্ত করতে পারে।

এটি বলার পরে, এখানে একাধিক আমদানি বিবেচনা করার একটি উদাহরণ রয়েছে (যখন লাইন সীমা অতিক্রম করে, পিইপি -8 এ সংজ্ঞায়িত হয় ), এছাড়াও স্ট্রিংগুলিতে সাধারণভাবে প্রয়োগ করা হয়:

from app import (
    app, abort, make_response, redirect, render_template, request, session
)

1

দীর্ঘ আক্ষরিক স্ট্রিংয়ের কারণে যদি আপনি আপনার লাইনটি ভাঙতে চান তবে আপনি সেই স্ট্রিংটিকে টুকরো টুকরো করে ফেলতে পারেন:

long_string = "a very long string"
print("a very long string")

দ্বারা প্রতিস্থাপন করা হবে

long_string = (
  "a "
  "very "
  "long "
  "string"
)
print(
  "a "
  "very "
  "long "
  "string"
)

উভয় মুদ্রণ বিবৃতি জন্য আউটপুট:

a very long string

প্রভাব মধ্যে প্রথম বন্ধনী লক্ষ্য করুন।

আরও লক্ষ করুন যে আক্ষরিক স্ট্রিংগুলিকে টুকরো টুকরো করা কেবল স্ট্রিংয়ের অংশগুলিতে আক্ষরিক উপসর্গটি ব্যবহার করতে দেয়:

s = (
  "2+2="
  f"{2+2}"
)

0

লাইন ধারাবাহিকতা অপারেটর যেমন "ie" ব্যবহার করুন

উদাহরণ:

# Ex.1

x = 1
s =  x + x**2/2 + x**3/3 \
       + x**4/4 + x**5/5 \
       + x**6/6 + x**7/7 \
       + x**8/8
print(s)
# 2.7178571428571425


----------


# Ex.2

text = ('Put several strings within parentheses ' \
        'to have them joined together.')
print(text)


----------


# Ex.3

x = 1
s =  x + x**2/2 \
       + x**3/3 \
       + x**4/4 \
       + x**6/6 \
       + x**8/8
print(s)
# 2.3749999999999996
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.