Dibandingkan dengan bahasa seperti Perl, Python memiliki sejumlah konstruk kontrol yang terbatas:
- hanya
if
dan tidak unless
,
- hanya
for
itu mengulangi urutan dan tidak ada foreach
atau gaya-C for
,
- hanya
while
itu memeriksa suatu kondisi setiap loop dan tidak do-while
,
- hanya
if-elif
dan tidak switch
,
- hanya ada satu konstruk komentar
#
, dan untuk setiap baris Anda dapat mengetahui apakah itu dikomentari atau tidak, tanpa melihat baris sebelumnya.
Juga, ada hampir satu cara untuk indentasi sumber Anda; kebanyakan kasus lekukan kreatif secara sintaksis dikecualikan.
Ini membuat penguraian sumber Python lebih mudah bagi manusia.
Ada upaya untuk menjadi minimal namun lengkap dalam tipe bawaan dan pustaka standar.
- untuk daftar yang dapat diubah, Anda menggunakan satu-satunya
list
tipe bawaan; itu O (1) untuk sebagian besar operasi, dan Anda tidak perlu memilih implementasi yang tepat,
- untuk daftar yang tidak berubah, sama-sama, Anda hanya menggunakan
tuple
jenisnya,
- untuk peta, Anda menggunakan satu-satunya built-in
dict
yang sangat efisien dalam banyak kasus, tidak perlu merenungkan implementasi yang akan digunakan.
Python 3 memperluas ini ke integer: tidak peduli seberapa besar integer Anda, Anda menggunakan tipe yang sama dan tidak pernah peduli tentang paksaan.
Python berusaha menghindari gula sintaksis. Tetapi kadang - kadang itu menambahkan gula sintaksis hanya untuk membuat cara yang jelas menjadi jelas. Anda dapat menulis if foo is not None
alih-alih if not (foo is None)
karena 'tidak' adalah huruf khusus. Masih foo is not None
mudah dibaca, tidak bisa disalahartikan, dan Anda tidak harus berpikir, Anda hanya menulis hal yang sudah jelas.
Tentu saja, sebagian besar hal yang lebih rumit dalam Python dapat dilakukan dengan beberapa cara. Anda dapat menambahkan metode ke kelas dengan deklarasi atau dengan penetapan slot sederhana, Anda dapat meneruskan argumen ke berbagai fungsi dalam sejumlah cara kreatif, dll. Itu hanya karena bagian dalam bahasa sebagian besar diekspos.
Kuncinya adalah bahwa selalu ada satu cara yang dimaksudkan untuk menjadi yang terbaik, yang mencakup semua kasus. Jika ada cara lain, mereka tidak ditambahkan sebagai alternatif yang sama (seperti if
dan unless
) tetapi hanya mengekspos kerja batin. Perlahan tapi pasti alternatif semacam itu sudah usang (tidak dihilangkan!) Dengan meningkatkan mekanisme terbaik yang diketahui.
Dekorator membungkus panggilan fungsi AOP. Sebelum 2.6, Anda harus menggunakan __metaclass__
anggota sihir untuk mendeklarasikan metaclass kelas; sekarang Anda dapat menggunakan sintaksis dekorator yang sama untuk ini juga. Sebelum ke 3.0 Anda memiliki dua jenis string, byte-oriented dan Unicode, yang dapat Anda campur secara tidak sengaja. Sekarang Anda memiliki satu-satunya Unicode str
dan satu-satunya biner-transparan bytes
, yang tidak dapat Anda campur tanpa sengaja.
"""
komentar (docstrings). Ini membentang beberapa baris.__doc__
atribut. Tetapi string adalah area di mana Python pasti menyediakan banyak 'cara yang benar': gunakan kutipan tunggal, ganda, atau tiga kali lipat, secara implisit bergabung dengan literal yang berdekatan, gunakanr
untuk literal mentah, dll.Beberapa contoh lainnya adalah:
len()
adalah fungsi alih-alih metode yang ada di setiap urutan; jika Anda membandingkan dengan Java Anda memiliki.length
,.size()
,.getSize()
, dan metode lain untuk menemukan jumlah elemen secara berurutan.Contoh lain adalah kenyataan bahwa itu
.join()
adalahstring
metode, bukan metode yang ada di setiap urutan. Anda tidak perlu tahu apakah parameter gabungan adalah daftar, set, pemahaman, atau apa pun, itu akan berfungsi.sumber
Di C ada banyak cara yang mungkin untuk meningkatkan nilai variabel dengan satu:
Setiap akhirnya meningkatkan nilai
i
oleh1
, tetapi masing-masing sedikit berbeda.Dengan Python, hanya ada satu cara; tambahkan saja.
Dan sementara ada lebih dari satu cara yang valid secara sintaksis untuk melakukan ini (misalnya
i = i + 1
), Anda melakukan hal yang sama dengan efek samping yang sama.sumber
i = i + 1
adalah penugasan, bukan kenaikan. Dalam python kenaikan adalahi += 1
. Dalam bahasa C-gaya yang Anda dapat menulisi++
,++i
dani += 1
.i += 1
, BTW) menghasilkan hasil yang persis sama. Satu-satunya saat saya melihat orang-orang menjadi bingung adalah ketika mereka menambah atau menambah variabel sebagai bagian dari ekspresi yang lebih besar, dan itu biasanya cepat diperbaiki dengan membaca bagian referensi bahasa yang sesuai. Secara pribadi, saya akan memilih pada fakta bahwa Anda dapat merujuk ke karakter kelima dari string oleh keduanyastr[4]
atau*(str+4)
, tapi mungkin itu terlalu mudah ...max(i++, ++i)
tidak dapat dengan cepat diperbaiki. C memiliki banyak kasus perilaku "tidak terdefinisi" dan "tergantung pada implementasi", semua untuk alasan yang baik - tetapi masing-masing dapat membuat perangkap.Kemungkinan lain mungkin daftar pemahaman. Dengan Python, Anda bisa melakukan ini:
Tetapi cara "jelas" (jika Anda orang Belanda atau lebih akrab dengan Python) melakukan hal ini adalah dengan pemahaman daftar:
Lebih pendek, new_list dibuat dalam satu langkah, itu berjalan lebih cepat saya percaya, dan elegan. Pada sisi negatifnya, orang bisa berpendapat itu terasa kurang eksplisit, tapi saya pikir begitu Anda terbiasa, itu juga eksplisit.
sumber