2011-11-11 29 views
10

PEP 8 dilim operatöründen bahsetmez. karmaşık ifadeler kullanırken Benim anlayış, diğer operatörler farklı olarak, boşlukstili, dilim operatörünü biçimlendirme

spam[3:5] # OK 
spam[3 : 5] # NOT OK 

ile çevrili gerektiğini daha iyi stil

ben katılıyorum
 
    1. spam[ham(66)//3:44+eggs()] 
    2. spam[ham(66) // 3: 44 + eggs()] 
    3. spam[ham(66) // 3 : 44 + eggs()] 
    4. something else? 

cevap

8

, PEP8 açıkça bu biçimdeki dilim operatörü söz etmez yapabilirdi, ama spam[3:5] kesinlikle daha yaygın ve IMHO daha okunabilir - Bir slice nesneyi oluşturmak için özel bir sözdizimi var. pep8 checker gitmeyi şey ise

, : önce uzay

[[email protected]]$ pep8 <(echo "spam[3:44]") # no warnings 
[[email protected]]$ pep8 <(echo "spam[3 : 44]") 
/dev/fd/63:1:7: E203 whitespace before ':' 
kadar işaretlenecektir ... ama bir edebi dicti ve hiçbir boşluk tanımlanmıştır operatör olmak : varsayar nedeniyle bu sadece operatörden önce bekleniyor. Bu nedenle spam[3: 44] geçer, ancak bu doğru görünmüyor. Bu sayede spam[3:44]'a yapışırdım.


İç içe geçmiş aritmetik işlemler biraz daha zorlayıcıdır.

[[email protected]]$ pep8 <(echo "spam[ham(66)//3:44+eggs()]") 
/dev/fd/63:1:13: E225 missing whitespace around operator 

[[email protected]]$ pep8 <(echo "spam[ham(66) // 3:44 + eggs()]") # OK 

[[email protected]]$ pep8 <(echo "spam[ham(66) // 3 : 44 + eggs()]") 
/dev/fd/63:1:18: E203 whitespace before ':' 

Ancak, ilk bakışta gözle ayrıştırmak için yukarıdaki zor tamamı: senin 3 örnekler arasında yalnızca 2 tek PEP8 doğrulama geçirir.

spam[(ham(66) // 3):(44 + eggs())] 

Ya da daha komplikasyon işlemleri için:

PEP8 ile okunabilirlik ve uygunluk için

, ben şahsen için gitmek istiyorum

s_from = ham(66) // 3 
s_to = 44 + eggs() 
spam[s_from:s_to] 
2

kabul edilir hangisi, bu bekletmeyi olduğunu mu senin ilk örnek. İkincisi için: PEP 20. Okunabilirlik sayılır. Karmaşık dilim ifadenizin anlamsal olarak en önemli kısmı dilim operatörünün kendisidir, ifadeyi ayrıştırılması gereken iki bölüme ayırır (hem insan okuyucu hem de yorumlayıcı tarafından). Bu nedenle sezgim, PEP 8 ile tutarlılığın : operatörünü vurgulamak için feda edilmesi gerektiğidir. örnekte olduğu gibi beyaz alanlara sahip onu çevreleyen tarafından 3. Soru artar okunabilirlik ya da olmasın ifadenin iki taraf içinde boşlukları atlayarak ise:

1. spam[ham(66)/3 : 44+eggs()] 

vs

2. spam[ham(66)/3 : 44 + eggs()] 

Ben 1. hızlı bulmak ayrıştırmak için.

3

ben PEP8 kullanılan dilimleme bkz: Ben kesin böyle hitap etmem ama senin (ve benim) anlayış yedekler

 
    - Use ''.startswith() and ''.endswith() instead of string slicing to check 
     for prefixes or suffixes. 

     startswith() and endswith() are cleaner and less error prone. For 
     example: 

     Yes: if foo.startswith('bar'): 

     No: if foo[:3] == 'bar': 

: Bildiğim kadarıyla kullanılacak şekilde

spam[3:5] # OK 

Daha karmaşık durumda, # 3 kullanırdım. Hiç-boşluk-etrafında, seansları : yöntem bu durumda iyi göründüğünü sanmıyorum:

spam[ham(66)/3:44 + eggs()] # looks like it has a time in the middle. Bad. 

Eğer :, operatör aralığını feda etme, daha öne fazladan boşluk eklemek istiyorsanız :: Ben operatör aralığı gibi çünkü

spam[ham(66)/3 : 44 + eggs()] # Wow, it's easy to read! 

Ben 1. kullanmak ister ve 2. çok fazla sözlük key: value sözdizimi benziyor.

Ayrıca bir operatör olarak da adlandırmam. Ayrıca

Zaten belirtildiği gibi
spam[slice(3, 5)]