Pertanyaan Bagaimana saya bisa melakukan pemutusan garis (garis lanjutan)?


Saya memiliki baris kode yang panjang yang ingin saya bagi di antara banyak baris. Apa yang saya gunakan dan apa sintaksnya?

Misalnya, menambahkan banyak string,

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

dan memilikinya dalam dua baris seperti ini:

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

801
2017-09-09 23:45


asal


Jawaban:


Apa garisnya? Anda hanya dapat memiliki argumen pada baris berikutnya tanpa masalah:

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

Kalau tidak, Anda dapat melakukan sesuatu seperti ini:

if a == True and \
   b == False

Periksalah panduan gaya untuk informasi lebih lanjut.

Dari garis contoh Anda:

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

Atau:

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

Perhatikan bahwa panduan gaya mengatakan bahwa menggunakan kelanjutan implisit dengan tanda kurung lebih disukai, tetapi dalam kasus khusus ini hanya dengan menambahkan tanda kurung di sekitar ekspresi Anda mungkin adalah cara yang salah untuk pergi.


910
2017-09-09 23:52



Dari Panduan Gaya untuk Kode Python:

Cara yang lebih disukai untuk membungkus garis panjang adalah dengan menggunakan kelanjutan garis tersirat Python di dalam tanda kurung, tanda kurung dan tanda kurung. Garis panjang dapat dipecah menjadi beberapa garis dengan membungkus ekspresi dalam tanda kurung. Ini harus digunakan dalam preferensi untuk menggunakan backslash untuk kelanjutan garis.

Backslashes mungkin masih tepat pada waktunya. Misalnya, panjang, banyak dengan pernyataan tidak dapat menggunakan kelanjutan implisit, sehingga garis miring terbalik dapat diterima:

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

Kasus lain seperti itu adalah dengan pernyataan tegas.

Pastikan untuk memasukkan garis lanjutan dengan tepat. Tempat yang disukai untuk memutus operator biner adalah setelah operator, bukan sebelumnya. Beberapa contoh:

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)

EDIT: PEP8 sekarang merekomendasikan konvensi yang berlawanan (untuk melanggar pada operasi biner) yang digunakan oleh Mathematicians dan penerbit mereka untuk meningkatkan keterbacaan.

Gaya pemecahan Donald Knuth sebelum operator biner meluruskan operator secara vertikal, sehingga mengurangi beban kerja mata saat menentukan item mana yang ditambahkan dan dikurangi.

Dari PEP8: Haruskah baris baru sebelum atau sesudah operator biner?:

Donald Knuth menjelaskan aturan tradisional dalam seri Computer and Typesetting: "Meskipun formula dalam paragraf selalu pecah setelah operasi biner dan relasi, formula yang ditampilkan selalu pecah sebelum operasi biner" [3].

Mengikuti tradisi dari matematika biasanya menghasilkan kode yang lebih mudah dibaca:

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

Dalam kode Python, diperbolehkan untuk melanggar sebelum atau sesudah operator biner, selama konvensi konsisten secara lokal. Untuk gaya kode baru Knuth disarankan.

[3]: TeXBook karya Donald Knuth, halaman 195 dan 196


177
2017-09-10 00:06



Bahaya dalam menggunakan backslash untuk mengakhiri garis adalah bahwa jika spasi ditambahkan setelah backslash (yang tentu saja sangat sulit untuk dilihat), backslash tidak lagi melakukan apa yang Anda pikir itu.

Lihat Python Idiom dan Anti-Idioms (untuk Python 2 atau Python 3) untuk lebih.


59
2017-09-15 06:28



Anda dapat memutuskan garis di antara tanda kurung dan tanda kurung. Selain itu, Anda bisa menambahkan karakter backslash \ ke garis untuk secara eksplisit memecahkannya:

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

20
2017-09-21 12:20



Masukan a \ di akhir baris Anda atau lampirkan pernyataan di parens ( .. ). Dari IBM:

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

atau

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

19
2017-09-09 23:48



Dari mulut kuda: Baris eksplisit   bergabung

Dua atau lebih garis fisik mungkin   bergabung ke dalam garis logis menggunakan   karakter backslash (\), sebagai berikut:   ketika garis fisik berakhiran   backslash yang bukan bagian dari string   literal atau komentar, itu bergabung dengan   berikut membentuk satu logis   baris, menghapus backslash dan   mengikuti karakter akhir-baris. Untuk   contoh:

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

Garis yang berakhiran backslash tidak bisa   bawa komentar. A backslash tidak   lanjutkan komentar. A backslash tidak   tidak melanjutkan token kecuali untuk string   literal (yaitu, token selain   literal string tidak dapat dipisahkan   garis-garis fisik menggunakan backslash). SEBUAH   backslash adalah ilegal di tempat lain di   baris di luar string literal.


17
2017-09-09 23:53