Saya seorang programmer Python terutama yang menggunakan pylint untuk linting kode sumber. Saya dapat menghilangkan semua peringatan kecuali satu: Nama tidak valid untuk konstanta. Mengganti nama menjadi semua perbaikan memperbaikinya, tetapi apakah saya benar-benar harus melakukan itu? Jika saya melakukannya, saya menemukan bahwa kode saya terlihat jelek karena sebagian besar variabel konstan (menurut pylint).
python
coding-style
coding-standards
conventions
Abhishek Kumar
sumber
sumber
NOTES_DIRECTORY = argv[1] chdir(NOTES_DIRECTORY) FILES = glob('*.txt') RAND_FILE = choice(FILES) with open(RAND_FILE) as notes_file: POINTS = notes_file.readlines() RAND_POINT = choice(POINTS)
Jawaban:
Anda mungkin menulis kode seperti ini:
Anda harus memindahkan kode ini ke fungsi:
Pylint mengasumsikan bahwa kode yang benar-benar berfungsi akan berada di dalam fungsi. Karena Anda memiliki kode ini di tingkat atas kode Anda dan bukan di dalam fungsi itu jadi bingung.
Secara umum, itu adalah gaya yang lebih baik untuk melakukan pekerjaan di dalam suatu fungsi daripada di tingkat atas. Ini memungkinkan Anda untuk mengatur dengan lebih baik apa yang Anda lakukan dan memfasilitasi penggunaannya kembali. Anda seharusnya hanya memiliki kode yang melakukan algoritme di luar fungsi dalam skrip cepat dan kotor.
sumber
Iya nih. Menurut aturan PEP8 tentang konstanta :
Versi Panjang:
Di komunitas Python (seperti di banyak komunitas lain) ada konvensi tentang cara menulis kode. Ini berbeda dari kode kerja : walaupun Anda menulis konstanta semua huruf kecil, kode Anda tetap berfungsi.
Tetapi ada konsensus komunitas (seperti yang didokumentasikan dalam PEP8) yang "ditegakkan" dengan alat-alat seperti pylint . Jika Anda memprogram untuk kebahagiaan Anda sendiri, Anda mungkin mengabaikan petunjuk yang diberikan pylint kepada Anda. Jika Anda ingin pertukaran terbuka dengan komunitas, alias »seseorang selain saya harus menggunakan kode saya«, Anda harus menyiapkan kode Anda sesuai dengan PEP8.
sumber
pylint
melakukan kesalahan. Python tidak menyediakan cara untuk membedakan konstanta dari variabel, selain itu konstanta diharapkan selalu memiliki nilai yang sama.pylint
mengasumsikan bahwa apa pun yang hanya ditetapkan sekali dan tidak pernah berubah adalah konstan, tetapi kecuali itu dimaksudkan untuk konstan, itu hanya bisa menjadi artefak dari implementasi. Dan secara khusus kode yang diberikan dalam komentar untuk pertanyaan memiliki nilai yang akan berbeda pada setiap proses, oleh karena itu tidak boleh dianggap sebagai konstanta bahkan jika pylint berpikir demikian.const
kata kunci. Meskipun nilai awal berbeda, selain mungkinPI
.pylint
mengasumsikan yang kedua bahkan ketika yang pertama adalah kasusnya.Norma komunitas PEP8 dan Python harus digunakan
ALL_CAPS_CONSTANTS
. Ini adalah petunjuk visual yang umum, yang digunakan selama beberapa dekade di C, Java, Perl, PHP, Python, bash, dan bahasa pemrograman lainnya serta lingkungan shell. Tetapi dalam bahasa online modern, SEMUA CAPS TANDA-TANDA TANGAN BERANDA . Dan berteriak itu kasar.Namun, Python agak tidak konsisten
ALL_CAPS_CONSTANTS
. JavaScript mungkin adaMath.PI
, tetapi Python memilikinyamath.pi
. Tidak ada yang lebih dikenal atau konstan konstan daripada π. Atau pertimbangkansys.version_info
, versi Python yang Anda jalankan. 100% konstan selama umur program Anda - lebih dariPORT
atauMAX_ITERATIONS
konstanta lain yang akan Anda tetapkan. Atau bagaimanasys.maxsize
? Nilai integer asli maksimum platform Anda adalah konstan, bukan hanya pada satu atau dua program yang berjalan, tetapi juga masa pakai perangkat keras Anda.Jika konstanta-konstanta ini - termasuk beberapa seperti π dan e yang merupakan konstanta fundamental alam semesta, dan tidak akan bervariasi di sepanjang kekekalan - jika mereka dapat lebih rendah, yah ... demikian juga konstanta lainnya. Kamu bisa memilih.
Ingat, PEP8 adalah panduan gaya. Pedoman, bukan hukum. Sebuah pedoman sering dilanggar bahkan oleh perpustakaan standar Python. Dan mengutip pedoman inti Python lain, PEP20 (alias "The Zen of Python"):
Pada catatan praktis, ketika sebuah program
YELLY_CONSTANT
danSHOUTY_PARAMETER
mulai untuk parut, itu membantu untuk mengingat bahwa konstanta semua-caps umumnya tidak benar-benar abadi cita-cita Platonis , tetapi parameter dari program yang dijalankan. Tidak ada yang benar-benar konstan tentangPORT
,,SITENAME
atauNUMRUNS
, dan mereka tidak harus dikelola sebagai global program mandiri. Misalnya, mereka dapat dimasukkan ke dalam kamus sebagai kumpulan parameter program yang dapat diakses secara global:Python juga memiliki fasilitas melewati parameter kata kunci yang bagus yang mengurangi kebutuhan untuk menggunakan
APPARENTLY_ANGRY_GLOBAL_VARIABLES
:Dalam praktiknya, banyak dari nilai-nilai ini akan (atau seharusnya) dibaca dari file config, variabel lingkungan OS, argumen baris perintah, atau sumber lain untuk memenuhi inversi prinsip / pola kontrol . Tapi itu cerita yang lebih besar untuk hari lain.
sumber
Ya, itu cukup umum di sebagian besar bahasa pemrograman (setidaknya yang saya gunakan).
Anda dapat merujuk ke tautan Google ini untuk berbagi gaya yang sama antara pengembang dari tim yang sama.
Disarankan untuk digunakan
sumber