از فاصلههای نامربوط که در شرایط زیر صدق میکنند بپرهیزید:
I. بدون هیچ واسطه در داخل پرانتزها، آکولادها و کروشهها:
Yes:
spam(ham[1], {eggs: 2})
No:
spam( ham[ 1 ], { eggs: 2 } )
II. بدون هیچ واسطه قبل از کاما، سمیکولن(semicolon) و کولن(colon):
Yes:
if x == 4: print(x, y); x, y = y, x
No:
if x == 4 : print(x , y) ; x , y = y , x
III. برخی اوقات کولن شبیه به یک عملگر دودویی رفتار میکنه پس باید ما هم باهاش مثل یه عملگر رفتار کنیم حداقل یه عملگر با اولویت پایین و اطراف اون فاصله بزاریم البته به غیر از زمانهایی که عملوند اون حذف شده باشه بطوریکه فاصله از سمت عملوند هم حذف میشه:
Yes:
ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham[1:9:]
ham[lower:upper], ham[lower:upper:], ham[lower::step]
ham[lower+offset : upper+offset]
ham[: upper_fn(x) : step_fn(x)], ham[:: step_fn(x)]
ham[lower + offset : upper + offset]
No:
ham[lower + offset:upper + offset]
ham[1: 9], ham[1 :9], ham[1:9 :3]
ham[lower : : upper]
ham[ : ]
IV. بدون واسطه قبل از پرانتز باز برای مشخص کردن آرگومانهای تابع هنگام فراخوانی:
Yes:
spam(1)
No:
spam (1)
V. بدون واسطه قبل از پرانتز باز برای شروع indexing:
Yes:
dct['key'] = lst[index]
No:
dct ['key'] = lst [index]
VI. بیش از یک فاصله اطراف تساوی انتساب (یا هر تساوی دیگر) به بهانهی تراز دادن با بقیه:
Yes:
x = 1
y = 2
long_variable = 3
No:
x = 1
y = 2
long_variable = 3
I. این عملگرهای باینری را همیشه با یک فاصله در اطراف آنها محاصره کنید: انتساب ( = )، انتسابهای تکمیلی (+=, -= و …)، مقایسهای( == , < , > , != , <> , <= , >= , in , not in , is , is not )، بولی (and , or , not).
II. اگر عملگرهایی با اولویتهای متفاوت مورد استفاده قرار گیرند، فقط اطراف عملگر با اولویت کمتر فاصله قرار میدهیم البته این بیشتر به تشخیص و سلیقهی شخصی شما بستگی دارد، امّا، هیچ وقت بیشتر از یک فاصله استفاده نکنید و همیشه در هر دو طرف عملگر به یک میزان فاصله قرار دهید.
Yes:
i = i + 1
submitted += 1
x = x*2 – 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)
No:
i=i+1
submitted +=1
x = x * 2 – 1
hypot2 = x * x + y * y
c = (a + b) * (a - b)
III. هنگام استفاده از = برای مقداری دهی اولیه به پارامتر یا مشخص کردن مقدار یک آرگومان اطراف آن از فاصله استفاده نمیکنیم.
Yes:
def complex(real, image=0.0):
return magic(r=real, i=image)
No:
def complex(real, image = 0.0):
return magic(r = real, i = image)
IV. استفاده از جملات مرّکب (چندین جمله در یک خط) اصلاً توصیه نمیشه:
Yes:
if foo == 'blah':
do_blah_thing()
do_one()
do_two()
do_three()
Rather No:
if foo == 'blah': do_blah_thing()
do_one(); do_two(); do_three()
V. زمانی که میتوان ساختارهای if/for/while را در یک قالب کوچک تک خطی نوشت هرگز آنها را در چندین قالب ننویسید:
Rather No:
if foo == 'blah': do_blah_thing()
for x in lst: total += x
while t < 10: t = delay()
Definitely No:
if foo == 'blah': do_blah_thing()
else: do_non_blah_thing()
try: somthing()
finally: cleanup()
do_one(); do_two(); do_three(long, argument,
list, like, this)
if foo == 'blah': one(); two(); three()