Apakah ini tidak konsisten dengan merekomendasikan spasi di sekitar setiap kejadian =
dalam kode Python?
Bagaimana:
func(1, 2, very_long_variable_name=another_very_long_variable_name)
lebih baik daripada:
func(1, 2, very_long_variable_name = another_very_long_variable_name)
Setiap tautan ke diskusi / penjelasan oleh BDFL Python akan dihargai.
Pikiran, pertanyaan ini lebih tentang kwargs daripada nilai default, saya baru saja menggunakan ungkapan dari PEP 8.
Saya tidak meminta pendapat. Saya menanyakan alasan di balik keputusan ini. Ini lebih seperti menanyakan mengapa saya menggunakan {
pada baris yang sama dengan if
pernyataan dalam program C, bukan apakah saya harus menggunakannya atau tidak.
sumber
{
baris baru setelahnyaif
(menyimpan jumlah karakter yang sama) tetapi tidak dalam definisi kelas. Parameter kata kunci juga berbeda dari nilai default tetapi masih menggunakan rekomendasi gaya yang sama.kw1 = kw1, kw2 = kw2
;) tapi mungkin itulah yang dipikirkan Guido dan Barry.Saya tidak akan menggunakan very_long_variable_name sebagai argumen default. Jadi pertimbangkan ini:
atas ini:
Juga, tidak masuk akal untuk menggunakan variabel sebagai nilai default. Mungkin beberapa variabel konstan (yang sebenarnya bukan konstanta) dan dalam hal ini saya akan menggunakan nama yang semuanya huruf besar, deskriptif namun sesingkat mungkin. Jadi tidak ada yang lain_ sangat _...
sumber
Ada pro dan kontra.
Saya sangat tidak menyukai cara membaca kode yang sesuai dengan PEP8. Saya tidak percaya pada argumen yang
very_long_variable_name=another_very_long_variable_name
lebih bisa dibaca manusia daripadavery_long_variable_name = another_very_long_variable_name
. Ini bukan cara orang membaca. Ini adalah beban kognitif tambahan, terutama jika tidak ada penyorotan sintaks.Namun, ada manfaat yang signifikan. Jika aturan spasi ditaati, pencarian parameter secara eksklusif menggunakan alat jauh lebih efektif.
sumber
IMO meninggalkan ruang untuk args memberikan pengelompokan visual yang lebih bersih dari pasangan arg / nilai; tampilannya tidak terlalu berantakan.
sumber
arg1=40
itu lebih mudah dibaca karena hubungannya lebih jelas.Saya pikir ada beberapa alasan untuk ini, meskipun saya mungkin hanya merasionalisasi:
a == b
yang juga bisa berupa ekspresi valid di dalam panggilan.sumber
Bagi saya itu membuat kode lebih mudah dibaca dan dengan demikian merupakan kesepakatan yang baik.
Saya pikir perbedaan utama dalam hal gaya antara penugasan variabel dan penugasan kata kunci fungsi adalah bahwa hanya boleh ada satu
=
baris untuk yang pertama, sedangkan umumnya ada beberapa=
baris untuk yang terakhir.Jika tidak ada pertimbangan lain, kita akan lebih suka
foo = 42
untukfoo=42
, karena yang terakhir ini bukan bagaimana tanda sama biasanya diformat, dan karena mantan baik secara visual memisahkan variabel dan nilai dengan spasi.Tapi ketika ada beberapa tugas pada satu baris, kita lebih suka
f(foo=42, bar=43, baz=44)
untukf(foo = 42, bar = 43, baz = 44)
, karena mantan visual memisahkan beberapa tugas dengan spasi, sedangkan yang terakhir tidak, sehingga agak sulit untuk melihat di mana pasangan kunci / nilai yang.Berikut adalah cara lain untuk menggambarkannya: ada adalah konsistensi belakang konvensi. Konsistensi itu adalah: "tingkat pemisahan tertinggi" dibuat lebih jelas secara visual melalui spasi. Tingkat pemisahan yang lebih rendah tidak termasuk (karena akan membingungkan dengan spasi kosong yang memisahkan tingkat yang lebih tinggi). Untuk tugas variabel, tingkat pemisahan tertinggi adalah antara variabel dan nilai. Untuk penetapan kata kunci fungsi, tingkat pemisahan tertinggi adalah antara tugas individu itu sendiri.
sumber