Yanıtlar:
Çizgi nedir? Bir sonraki satırda herhangi bir problem yaşamadan argümanlarınız olabilir:
a = dostuff(blahblah1, blahblah2, blahblah3, blahblah4, blahblah5,
blahblah6, blahblah7)
Aksi takdirde böyle bir şey yapabilirsiniz:
if a == True and \
b == False
Kontrol stil rehberi Daha fazla bilgi için.
Örnek satırınızdan:
a = '1' + '2' + '3' + \
'4' + '5'
Veya:
a = ('1' + '2' + '3' +
'4' + '5')
Stil kılavuzunun, parantezle örtülü sürdürmenin kullanılmasının tercih edildiğini, ancak bu durumda yalnızca ifadenizin etrafına parantez eklemenin muhtemelen yanlış yol olduğunu söylediğini unutmayın.
Gönderen PEP 8 - Python Kodu Stil Kılavuzu :
Uzun çizgileri sarmanın tercih edilen yolu, Python'un parantezler, parantezler ve parantez içindeki zımni çizgi devamını kullanmaktır. Uzun satırlar, ifadeleri parantez içinde sararak birden çok satır üzerinde kesilebilir. Bunlar hattın devamı için ters eğik çizgi kullanılmasına tercih edilmelidir.
Ters eğik çizgiler zaman zaman uygun olabilir. Örneğin, uzun, çoklu ifadelerle örtülü devam kullanılamaz, bu nedenle ters eğik çizgiler kabul edilebilir:
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())
Böyle bir diğer dava da iddia beyanları ile ilgilidir.
Devam eden satırı uygun şekilde girintili yaptığınızdan emin olun. İkili bir operatörün çevresinde kırılmak için tercih edilen yer , operatörden önce değil, operatörden sonradır . Bazı örnekler:
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 artık karşıt sözleşmeyi öneriyor , matematikçiler ve yayıncıları tarafından okunabilirliği artırmak için kullanılan (ikili işlemlerde kırılma için) .
Donald Knuth'un ikili bir operatörden önce kırılma tarzı, operatörleri dikey olarak hizalar, böylece hangi öğelerin ekleneceğini ve çıkarılacağını belirlerken gözün iş yükünü azaltır.
Gönderen : PEP8 Should önce veya bir ikili operatör sonra satır sonu? :
Donald Knuth, Bilgisayarlar ve Dizgi dizisindeki geleneksel kuralı şöyle açıklıyor: "Bir paragraf içindeki formüller her zaman ikili işlemler ve ilişkilerden sonra kırılsa da, görüntülenen formüller her zaman ikili işlemlerden önce kırılır" [3].
Matematik geleneğini takip etmek genellikle daha okunabilir bir kodla sonuçlanır:
# Yes: easy to match operators with operands income = (gross_wages + taxable_interest + (dividends - qualified_dividends) - ira_deduction - student_loan_interest)
Python kodunda, kural yerel olarak tutarlı olduğu sürece ikili bir operatörden önce veya sonra kırılmasına izin verilir. Yeni kod için Knuth'un tarzı önerilmektedir.
[3]: Donald Knuth'un TeXBook'u, sayfa 195 ve 196
The preferred way .. is by using Python's implied line continuation inside parentheses
ile aynı şey by wrapping expressions in parentheses
. Örneği güncelledim
Bir çizgiyi sonlandırmak için ters eğik çizgi kullanmanın tehlikesi, ters eğik çizgiden sonra boşluk eklenirse (ki, elbette, görmek çok zordur), ters eğik çizginin artık düşündüğünüzü yapmamasıdır.
Daha fazla bilgi için bkz. Python Deyimleri ve Anti-Deyimler ( Python 2 veya Python 3 için ).
set list listchars=trail:·
vim gibi bir şey . :)
Parantez ve kaşlı ayraçlar arasındaki çizgileri kesebilirsiniz. Ayrıca, \
bir çizgiye ters eğik çizgi karakterini , açıkça kırmak için ekleyebilirsiniz :
x = (tuples_first_value,
second_value)
y = 1 + \
2
Atın ağzından: Açık birleşme
İki veya daha fazla fiziksel çizgi, ters eğik çizgi karakterleri (
\
) kullanılarak mantıksal çizgilere birleştirilebilir : fiziksel bir çizgi, bir dizgi değişmezinin veya yorumunun parçası olmayan bir ters eğik çizgi ile sona erdiğinde, tek bir mantıksal çizgi oluşturarak aşağıdakilerle birleştirilir , ters eğik çizgiyi ve aşağıdaki satır sonu karakterini silme. Örneğin: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
Ters eğik çizgi ile biten bir satır yorum taşıyamaz. Ters eğik çizgi bir yoruma devam etmez. Ters eğik çizgi, dize değişmez değerleri dışında bir jetona devam etmez (yani dize değişmez değerleri dışındaki jetonlar, ters eğik çizgi kullanılarak fiziksel çizgiler arasında bölünemez). Ters eğik çizgi, bir dizgi değişmezinin dışındaki bir çizgide başka bir yerde yasadışıdır.
Pythonic yolu olmayabilir, ancak genellikle SQL sorguları gibi uzun bir dize yazmak için join işleviyle bir liste kullanın:
query = " ".join([
'SELECT * FROM "TableName"',
'WHERE "SomeColumn1"=VALUE',
'ORDER BY "SomeColumn2"',
'LIMIT 5;'
])
Otostopçunun Python Rehberinden Alınan ( Hattın Devamı ):
Mantıksal bir kod satırı kabul edilen sınırdan daha uzunsa, kodu birden çok fiziksel satıra bölmeniz gerekir. Satırın son karakteri ters eğik çizgi ise Python yorumlayıcısı ardışık satırları birleştirir. Bu bazı durumlarda yardımcı olur, ancak kırılganlığı nedeniyle genellikle kaçınılmalıdır: ters eğik çizgiden sonra çizginin sonuna eklenen beyaz boşluk kodu kıracak ve beklenmedik sonuçlara neden olabilir.
Daha iyi bir çözüm, öğelerinizde parantez kullanmaktır.Satır sonu üzerinde kapatılmamış bir parantez bırakıldığında, Python yorumlayıcısı parantez kapatılana kadar bir sonraki satıra katılır. Aynı davranış kıvırcık ve kare ayraçlar için de geçerlidir.
Bununla birlikte , çoğu zaman, uzun bir mantıksal çizgiyi bölmek, aynı anda çok fazla şey yapmaya çalıştığınızın, okunabilirliği engelleyebilecek bir işarettir.
Bununla birlikte, genel olarak dizelere de uygulanan çoklu ithalatı ( PEP-8'de tanımlanan çizgi sınırlarını aşarken ) dikkate alan bir örnek :
from app import (
app, abort, make_response, redirect, render_template, request, session
)
Uzun bir değişmez dizge nedeniyle satırınızı kırmak istiyorsanız, bu dizeyi parçalara ayırabilirsiniz:
long_string = "a very long string"
print("a very long string")
ile değiştirilecek
long_string = (
"a "
"very "
"long "
"string"
)
print(
"a "
"very "
"long "
"string"
)
Her iki yazdırma ifadesi için çıktı:
a very long string
Etkilenen parantezlere dikkat edin.
Değişmez dizeleri parçalara ayırmanın değişmez önekin yalnızca dizenin bazı bölümlerinde kullanılmasına izin verdiğine dikkat edin:
s = (
"2+2="
f"{2+2}"
)
Kullanım satır devam operatörü yani "\"
Örnekler:
# 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