Pythonic ne anlama geliyor? [kapalı]


93

Çoğu web sitesinde kodun pitonik olmadığı veya aynı amaca ulaşmak için daha pitonik bir yol olduğu şeklinde yorumlar görüyorum.

Pythonic bu bağlamda ne anlama geliyor? Örneğin, neden

while i < someValue:
   do_something(list[i])
   i += 1

pitonik değil

for x in list:
   doSomething(x)

pitonik mi?



Bu konu dışı bir sorudur. Konuyu daha fazla anlatmak için küçük bir kod örneği sağlayabilirdiniz.
ρss

Yanıtlar:


104

Açık, özlü ve bakımı kolay kod üretmek için Python dilinin özelliklerinden yararlanma.

Pythonic, sadece sözdizimini doğru yapmakla kalmayan, aynı zamanda Python topluluğunun kurallarını takip eden ve dili kullanılması amaçlandığı şekilde kullanan kod anlamına gelir.

Bu, diğer cevaplardan bağlantılı makalede olduğu gibi, olumsuz örnekle açıklanması belki de en kolayıdır. Pythonik olmayan kod örnekleri genellikle liste anlamaları veya üreteç ifadeleri gibi bir Python programlama modelini öğrenmek yerine C veya java'da daha yaygın olarak kullanılan kalıplarda levye yapmaya çalışan diğer dillerin kullanıcılarından gelir. Döngüler bunun özellikle yaygın örnekleridir.

Örneğin Java'da kullanabilirim

for i in (i; i < items.length ; i++)
 {
  n = items[i];
 ... now do something
 }

Python'da bunu while döngülerini kullanarak deneyebilir ve çoğaltabiliriz, ancak kullanımı daha temiz olacaktır.

for i in items:
  i.perform_action()

Veya bir üreteç ifadesi bile

(i.some_attribute for i in items)

Yani aslında birisi bir şeyin pirtonik olmadığını söylediğinde, kodun pitonların kodlama stiline daha uygun bir şekilde yeniden yazılabileceğini söylüyorlar.

import thisKomut satırına yazmak Python ilkelerinin bir özetini verir. Daha az bilinen ise kaynak kodunun import thiskesinlikle ve tasarım gereği pirtonik olmadığıdır! Ne yapılmaması gerektiğine dair bir örnek için ona bir göz atın.


27
Btw, "bunu içe aktar" için kaynak kodu burada: github.com/python/cpython/blob/master/Lib/this.py
Gautam

Farklı bir alanda örnek ne olabilir? Yemek yapmak, tasarlamak, sürmek gibi ..?
Daniel Springer

2
Daha karmaşık bir kod örneği için, Vigenere şifresinin "pitonik olmayan" bir uygulaması bu cevapta giderek daha "pitonik" hale getirildi (açıklama: kodum ve görüşlerim): stackoverflow.com/questions/2490334/…
Nick

18
Sanırım burada kullanıcı adıma bir yorum bırakmalıyım
Pythonic

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.