Apa arti pythonic? [Tutup]

93

Di banyak situs web saya sering melihat komentar bahwa kode itu tidak pythonic, atau ada cara yang lebih pythonic untuk mencapai tujuan yang sama.

Apa arti pythonic dalam konteks ini? Misalnya, mengapa

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

tidak sementara pythonic

for x in list:
   doSomething(x)

itu pythonic?

Jon
sumber
12
Zen of Python , What is Pythonic , dll ...
Martin Tournoij
Ini adalah pertanyaan di luar topik. Anda dapat memberikan contoh kode kecil untuk membuatnya lebih sesuai topik.
ρss

Jawaban:

104

Memanfaatkan fitur-fitur bahasa Python untuk menghasilkan kode yang jelas, ringkas dan mudah dipelihara.

Pythonic berarti kode yang tidak hanya mendapatkan sintaks yang benar tetapi juga mengikuti konvensi komunitas Python dan menggunakan bahasa dengan cara yang dimaksudkan untuk digunakan.

Ini mungkin paling mudah dijelaskan dengan contoh negatif, seperti pada artikel terkait dari jawaban lain. Contoh kode unpythonic sering kali berasal dari pengguna bahasa lain, yang alih-alih mempelajari pola pemrograman Python seperti pemahaman daftar atau ekspresi generator, mencoba menggunakan linggis dalam pola yang lebih umum digunakan di C atau java. Loop adalah contoh umum dari ini.

Misalnya di Java mungkin saya gunakan

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

Dengan Python kita dapat mencoba dan mereplikasi ini menggunakan while loop tetapi akan lebih bersih untuk digunakan

for i in items:
  i.perform_action()

Atau, bahkan ekspresi generator

(i.some_attribute for i in items)

Jadi pada dasarnya, ketika seseorang mengatakan sesuatu itu unpythonic, mereka mengatakan bahwa kode tersebut dapat ditulis ulang dengan cara yang lebih sesuai untuk gaya pengkodean ular piton.

Mengetik import thisdi baris perintah memberikan ringkasan prinsip Python. Yang kurang terkenal adalah bahwa kode sumbernya import thissudah pasti, dan menurut desain, unpythonic! Lihatlah itu sebagai contoh tentang apa yang tidak boleh dilakukan.

James
sumber
27
Btw, kode sumber untuk "impor ini" ada di sini: github.com/python/cpython/blob/master/Lib/this.py
Gautam
Apa yang akan menjadi contoh di bidang yang berbeda? Seperti memasak, mendesain, mengemudi ..?
Daniel Springer
2
Untuk contoh beberapa kode yang lebih kompleks, implementasi "unpythonic" dari sandi Vigenere dibuat secara progresif lebih "pythonic" dalam jawaban ini (pengungkapan: kode dan opini saya): stackoverflow.com/questions/2490334/…
Nick
18
Saya pikir saya harus meninggalkan komentar di sini dengan nama pengguna saya
Pythonic
Juga mungkin perlu dicatat bahwa istilah umumnya adalah "idiomatik"
Louis Maddox