Melakukan pencarian google untuk "pythonic" mengungkapkan berbagai interpretasi. The halaman wikipedia mengatakan:
Neologisme umum dalam komunitas Python adalah pythonic, yang dapat memiliki berbagai arti yang berkaitan dengan gaya program. Mengatakan kode itu pythonic berarti mengatakan bahwa ia menggunakan idiom Python dengan baik, bahwa itu alami atau menunjukkan kefasihan dalam bahasa. Demikian juga, untuk mengatakan tentang fitur antarmuka atau bahasa bahwa itu adalah pythonic adalah untuk mengatakan bahwa ia bekerja dengan baik dengan idiom Python, bahwa penggunaannya cocok dengan bagian bahasa lainnya.
Itu juga membahas istilah "unpythonic":
Sebaliknya, tanda kode unpythonic adalah bahwa ia mencoba untuk menulis kode C ++ (atau Lisp, Perl, atau Java) dengan Python — yaitu, memberikan transkripsi kasar daripada terjemahan idiomatik formulir dari bahasa lain. Konsep pythonicity terikat erat dengan filosofi keterbacaan minimalis Python dan menghindari pendekatan "ada lebih dari satu cara untuk melakukannya". Kode yang tidak dapat dibaca atau idiom yang tidak dapat dipahami adalah unpythonic.
Apa arti istilah "pythonic"? Bagaimana saya belajar menerapkannya secara efektif dalam praktik?
Jawaban:
Saya telah menemukan bahwa sebagian besar orang memiliki interpretasi mereka sendiri tentang apa arti "Pythonic" sebenarnya. Dari Wikipedia:
Saya telah menemukan bahwa lebih sering daripada tidak, lebih banyak contoh "pythonic" sebenarnya berasal dari orang yang mencoba menjadi pandai dengan idiom Python dan (sekali lagi, lebih sering daripada tidak) membuat kode mereka hampir tidak dapat dibaca (yang bukan Pythonic).
Selama Anda tetap berpegang pada idiom Python dan menghindari mencoba menggunakan gaya C ++ (atau bahasa lain) dalam Python, maka Anda menjadi Pythonic.
Seperti yang ditunjukkan oleh WorldEngineer, PEP8 adalah standar yang baik untuk diikuti (dan jika Anda menggunakan VIM, ada plugin yang tersedia untuk linting PEP8).
Sungguh, pada akhirnya, jika solusi Anda berhasil dan tidak benar-benar mengerikan tidak dapat dipertahankan dan lambat, siapa yang peduli? Lebih sering daripada tidak, tugas Anda adalah menyelesaikan tugas, bukan menulis kode pythonic yang paling elegan.
Catatan tambahan lain (hanya pendapat saya, jangan ragu untuk downvote karena itu;)): Saya juga menemukan komunitas Python diisi dengan satu ton ego (bukan karena sebagian besar komunitas tidak , itu hanya sedikit lebih lazim dalam komunitas seperti C dan Python). Jadi, menggabungkan ego dengan interpretasi yang disalahartikan sebagai "pythonic" akan cenderung menghasilkan banyak sekali hal-hal negatif yang tidak berdasar. Ambil apa yang Anda baca dari orang lain dengan sebutir garam. Tetap berpegang pada standar dan dokumentasi resmi dan Anda akan baik-baik saja.
sumber
Pythonic adalah kode idiomatis dengan Python. Ini berarti menggunakan struktur dan format yang bekerja dengan baik untuk Python dari sudut pandang pemrograman tetapi juga dari sudut pandang membaca komunitas. Ini sangat mirip dengan bagaimana K&R menetapkan standar untuk gaya pemrograman C untuk waktu yang lama. Panduan ini menunjukkan Anda harus kode secara Python. PEP 8 dirujuk dalam panduan itu sehingga mungkin layak dibaca.
sumber
Menulis "Pythonic" kode IMHO hanya membuat penggunaan efektif (V) fitur HLL bahasa yang disediakan. Sebagai contoh di mana-mana,
Itu sangat Pythonic. Saya ingat ketika saya mulai belajar C # setelah berbulan-bulan hanya Python,
entah bagaimana membingungkan saya, tetapi butuh satu menit bagi saya untuk kembali ke akar C / C ++ saya.
Cara Pythonic lainnya adalah menggunakan lambdas.
akan benar-benar mencetak
l
diurutkan dalam urutan menurun.Lalu ada "mengetik bebek" yang sangat banyak digunakan, tetapi sangat kurang dipahami - Jika berjalan dan berbicara seperti bebek, Anda memperlakukannya sebagai bebek. Ini terkait longgar dengan antarmuka dalam bahasa OO lainnya.
Juga menggunakan metode pemrograman fungsional di mana berlaku, seperti penggunaan peta dan mengurangi dianggap pythonic.
Saya melihat jawaban yang diposting saat saya mengetik, dan itu berisi tautan yang bagus. PS: Bukannya pengetahuan Anda tentang Python terbatas. Saya berani bertaruh bahwa Python bukan bahasa pertama Anda, dan karenanya, (seperti kebanyakan dari kita pythonistas) Anda harus belajar untuk mendapatkan "idiomatik" dengan ular! Tepuk tangan!
sumber
map
,reduce
,lambda
dan seperti yang idiomatik per se. Pemahaman daftar dan ekspresi generator adalah alternatif dan banyak yang lebih suka jika memungkinkan (khususnya, mereka kurang berisik ketika Anda membutuhkan lambda). Mereka tentu memiliki kegunaannya, dan acara pemrograman fungsional dalam idiom lain (misalnya dekorator).(x, y) = (7, 'fuhrer')
- namun saya hampir selalu "dikoreksi" bahwa tanpa parens adalah cara terbaik untuk menulisnya!print(sorted(l, reverse=True))
, yang juga secara eksplisit memberitahu pembaca apa yang terjadi. Saya akan menemukan contoh pertama Anda yang dapat disengketakan juga. Ada dua tugas yang dikompresi menjadi satu; tidak apa-apa, tapi saya tidak akan menyebutnya sangat Pythonic. Pembaca harus melihat lebih lama pada apa yang dilakukannya daripada dibandingkan dengan memiliki dua tugas.Kode Pythonic adalah:
sumber
Setiap kali saya mencoba untuk belajar bahasa baru, saya menemukan bahwa membaca kode oleh orang-orang yang tahu bahasa seperti punggung tangan mereka, melihat ke atas / bertanya tentang apa pun yang terlihat aneh, dan kemudian mencoba meniru gaya mereka adalah hal terbaik untuk dilakukan. Contoh:
Dalam Python, karena kita berada di subjek, saya menemukan contoh-contoh dari Dive Into Python sangat berguna untuk memulai. Mereka cenderung mengajarkan tidak hanya dasar-dasar Python, tetapi untuk benar-benar menekankan Python idiomatik .
Ketika mempelajari D, karena dokumentasinya tidak bagus pada saat itu karena bahasanya sangat tajam, saya belajar dengan membaca kode ke perpustakaan standar, khususnya, beberapa karya agung Andrei Alexandrescu .
Ketika belajar C ++ saya mewarisi basis kode dari programmer C ++ yang cukup bagus dan belajar banyak tentang pemrograman C ++ idiomatis dari desakannya untuk meneruskan wadah STL dengan referensi, dll.
Dalam semua bahasa, saya menemukan bahwa menelusuri pertanyaan StackOverflow tentang bahasa dan melihat apa yang biasanya dilakukan orang untuk mencapai hal-hal dasar membantu.
sumber
Python bukan Java mungkin memberi Anda beberapa saran yang bermanfaat. Tidak bisa mengatakan lebih banyak tanpa tahu masalah apa yang sedang Anda hadapi, tapi itu saran yang sangat konkret untuk programmer yang berasal dari bahasa lain (dalam hal ini khususnya java) latar belakang tentang bagaimana melakukan python secara berbeda.
sumber
Seseorang berkata kepada parafrase, untuk mempelajari apa itu Pythonic, cukup bash keluar beberapa kode. Saya tidak setuju dengan itu. Jika Anda suka menulis kode yang sangat padat, itu tidak membuatnya lebih Pythonic.
Salah satu cara untuk membantu Anda mendefinisikan apa itu Pythonic sejauh menyangkut diri Anda, tanyakan pada diri Anda, "Mengapa saya (berarti Anda) menggunakan bahasa Python?" Apa yang menarik bagimu tentang hal itu?
Bagi saya itu keterbacaan dan kurangnya kompilasi dan open source (hampir semuanya). Saya dapat mengunduh banyak pustaka dan membaca kode sumber mereka dengan sedikit tekanan tentang lisensi daripada banyak bahasa lainnya.
Bagi saya Python itu indah secara visual. Guido (pencipta Python) juga terus membuktikan kepada saya, melalui balasannya di PEPS dan diskusi) bahwa pilihannya untuk bagaimana dia membuat bahasa lebih unggul daripada ide saya sendiri tentang bagaimana seharusnya dibuat.
Bagi saya, seorang programmer hebat adalah seseorang dengan keterampilan pengambilan keputusan yang sangat terinformasi tentang cara yang harus ditempuh ketika coding. Bagi saya, Python membantu dengan membuat pilihan-pilihan itu dengan cepat.
Dengan menyederhanakan sintaksis kode sumber dengan mengizinkan pengetikan bebek alih-alih pengecoran tipe yang eksplisit, dan harapan bahwa pembuat kode meninjau kode Anda "haruslah pembuat kode yang berperilaku baik" mengarah ke sesuatu yang saya juga sebut "Pythonic"
Jadi ada dua sisi dari apa itu Pythonic. Salah satunya adalah sintaksis, yang lain adalah praktik. Bagaimana cara menjelaskan sisi yang lebih dalam dari apa itu "Pythonic" ..?
Dalam Python itu bukan masalah besar untuk melakukan ini: alist = ['one', 'two', 'three \ n'] alist.append ((1234, 'Atuple'))
dan tuple akan ditambahkan ke daftar tanpa memperhatikan jenis objek. Bagian Pythonic bukanlah bahwa Anda BISA melakukan ini, tetapi bahwa kode Anda harus MENGHARAPKAN ini dan hanya bekerja / beradaptasi.
Apa pun yang berfungsi pada objek -alis- harus ditulis dengan gagasan bahwa beberapa pembuat kode lain dapat masuk dan menambahkan non-string ke daftar dan bahwa adaptasi kode sumber oleh pembuat kode baru seharusnya tidak sulit untuk dilakukan. Bagaimanapun, itulah manfaat dari ducktype.
sumber
Beli buku yang direkomendasikan. Membacanya. Ini harus memberi Anda dasar yang baik dalam menggunakan bahasa dan dalam mekanisme yang harus memenuhi gaya komunitas
sumber