pengembangan-web-mp.com

Haruskah saya menggunakan semua huruf besar untuk konstanta saya?

Saya seorang Python programmer terutama yang menggunakan pylint untuk kode sumber linting. Saya dapat menghilangkan semua peringatan kecuali satu: Nama tidak valid untuk sebuah konstanta. Mengubah nama untuk semua caps 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).

37
Abhishek Kumar

Anda mungkin menulis kode seperti ini:

notes_director = argv[1]
chdir(notes_director)
files = glob('*.txt')
Rand_file = choice(files)
with open(Rand_file) as notes_file: 
    points = notes_file.readlines() 
    Rand_point = choice(points)

Anda harus memindahkan kode ini ke fungsi:

def main():
    notes_director = argv[1]
    chdir(notes_director)
    files = glob('*.txt')
    Rand_file = choice(files)
    with open(Rand_file) as notes_file: 
        points = notes_file.readlines() 
        Rand_point = choice(points)

# actually call the main function    
main()

Pylint mengasumsikan bahwa kode yang benar-benar berfungsi akan berada di dalam suatu fungsi. Karena Anda memiliki kode ini di tingkat atas kode Anda, bukan di dalam fungsi itu menjadi 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 algoritma di luar fungsi dalam skrip cepat dan kotor.

33
Winston Ewert

Iya. Menurut aturan PEP8 pada konstanta :

Konstanta biasanya didefinisikan pada tingkat modul dan ditulis dalam huruf kapital semua dengan menggarisbawahi kata-kata yang memisahkan. Contohnya termasuk MAX_OVERFLOW dan TOTAL.

Versi Panjang:

Di komunitas Python (seperti di banyak komunitas lainnya) ada konvensi tentang cara menulis kode. Ini berbeda dari kode kerja : bahkan jika Anda menulis konstanta semua huruf kecil, kode Anda masih 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.

22
Thomas Junk

PEP8 dan Python norma komunitas adalah menggunakan ALL_CAPS_CONSTANTS. Ini adalah petunjuk visual yang umum, 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 BERTERIAK . Dan berteriak itu kasar.

Namun, Python agak tidak konsisten tentang ALL_CAPS_CONSTANTS. JavaScript mungkin memiliki Math.PI, tetapi Python memiliki math.pi. Tidak ada yang lebih dikenal atau konstan konstan daripada π. Atau pertimbangkan sys.version_info, versi Python Anda menjalankan. 100% konstan selama umur program Anda - jauh lebih dari PORT atau MAX_ITERATIONS atau konstanta lain yang akan Anda tetapkan. Atau bagaimana sys.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 ini - termasuk beberapa seperti π dan e yang merupakan konstanta fundamental alam semesta, dan tidak akan bervariasi di sepanjang kekekalan - jika mereka dapat menjadi huruf kecil, baik ... begitu 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 inti lain Python pedoman, PEP2 (alias "The Zen of Python"):

  • Cantik lebih baik dari yang jelek
  • Jumlah keterbacaan diperhitungkan
  • Kepraktisan mengalahkan kemurnian.

Pada catatan praktis, ketika sebuah program YELLY_CONSTANT dan SHOUTY_PARAMETER mulai bersyukur, ada baiknya untuk mengingat bahwa konstanta all-caps umumnya tidak benar-benar bertahan cita-cita Platonis , tetapi parameter dari program berjalan. Tidak ada yang benar-benar konstan tentang PORT, SITENAME, atau NUMRUNS, 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:

config = {
    'port': 80,
    'sitename': "Bubba's Blog",
    'numruns': 100,
}

Python juga memiliki fasilitas melewati parameter kata kunci yang bagus yang mengurangi kebutuhan untuk menggunakan APPARENTLY_ANGRY_GLOBAL_VARIABLES:

def process_data(sitename, port=80, numruns=100):
    ...

process_data("Bubba's Blog")

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 kontrol prinsip/pola. Tapi itu cerita yang lebih besar untuk hari lain.

16
Jonathan Eunice

Ya, itu cukup umum di sebagian besar bahasa pemrograman (setidaknya yang saya gunakan).

Anda dapat merujuk ini tautan Google untuk berbagi gaya yang sama antara pengembang dari tim yang sama.

Disarankan untuk digunakan

Type                  |Public          |Internal
Global/Class Constants|CAPS_WITH_UNDER |_CAPS_WITH_UNDER
1
alain.janinm

Kode akan berfungsi terlepas dari apakah Anda menggunakan huruf besar konstanta. Ini disebut "konstanta" hanya variabel yang tidak akan berubah selama eksekusi kode.

Pendapat pribadi saya adalah bahwa jika mereka menggunakan huruf kapital, lebih mudah untuk mengingat bahwa mereka seharusnya adalah konstanta.

import operator

OPERATIONS = {"+": operator.add, "-": operator.sub}

def check_answer(num_1, num_2, operation, user_answer):
    correct_answer = OPERATIONS.get(operation)(num_1, num_2)
    is_correct = user_answer == correct_answer
    return (is_correct, correct_answer)

Juga, PEP8 mengatakan bahwa Anda harus menggunakan huruf kapital .

0
Gaetano Barreca