Zephyrnet Logosu

Python Enum: Python'da Numaralandırmalar Nasıl Oluşturulur – KDnuggets

Tarih:

Python Enum: Python'da Numaralandırmalar Nasıl Oluşturulur
Yazara göre resim
 

C++ veya Java gibi bir dilde programladıysanız, adlandırılmış sabitler oluşturmak için muhtemelen numaralandırmaları kullanmışsınızdır. Numaralandırmalar, genellikle haftanın günleri, öğrenci notları, sipariş durumu ve benzeri gibi sabit sayıda değerden birini alan bir değişkeniniz olduğunda faydalıdır.

Ancak Python'un açık bir enum veri türü yoktur. Ancak numaralandırmalar oluşturmak için Python standart kütüphanesindeki enum modülünü kullanabilirsiniz. Ve bu eğitim size nasıl yapılacağını öğretecek. 

En başlayalım!

Enum, “numaralandırma” anlamına gelir ve önceden tanımlanmış bir dizi adlandırılmış sabitten oluşur. Bu sabitler genellikle birbiriyle ilişkilidir. Yaygın örnekler arasında bir yıldaki aylar, haftanın günleri, notlar, sipariş ve görev durumları yer alır. 

Özetlemek gerekirse: Bir numaralandırma aslında her bir sabitin kendisiyle ilişkili anlamlı bir isme sahip olduğu ilgili sabitlerin bir koleksiyonudur.

Python'da, aşağıdakileri kullanarak numaralandırmalar oluşturabilirsiniz: numaralandırma modülü (ki bunu birazdan yapacağız!).

Neden Enums'u Kullanmalı?

Numaralandırmaların kullanılması kodun netliğini ve sürdürülebilirliğini artırmaya yardımcı olur. İşte nasıl: 

  • Numaralandırmalar, sihirli sayıları veya dizeleri anlamlı etiketlerle değiştirerek kodun netliğini artırır. Ayrıca, enum üyelerinin adları amaçlarını aktardıkça kodu daha kendi kendini belgeleyen hale getirirler. 
  • Numaralandırmalar, ilgili sabitleri tanımlamak ve yönetmek için basit bir yol sağlayarak kodun sürdürülebilirliğini artırır. 
  • Değişken atamalarını yalnızca geçerli numaralandırma değerleriyle sınırlayan numaralandırmalar aynı zamanda tür güvenliğini de sağlar. 
  • Numaralandırmalar, ilgili sabitlerin kolayca yinelenmesini ve karşılaştırılmasını kolaylaştırır.

Şimdi Python'da ilk numaralandırmamızı oluşturalım.

Bir oluşturacağız TaskStatus aşağıdaki dört adı ve değeri alan enum:

 

Python Enum: Python'da Numaralandırmalar Nasıl Oluşturulur
Yazara göre resim
 

İlk olarak, ithal ediyoruz Enum Enum'lar oluşturmak için enum modülünden sınıf. 

Daha sonra yeni bir sınıf tanımlıyoruz TaskStatus miras alan Enum bir numaralandırma oluşturmak için. Her üye benzersiz bir adla ve aşağıdaki gibi isteğe bağlı bir değerle tanımlanır:

from enum import Enum
	 
class TaskStatus(Enum):
    TODO = 0
    IN_PROGRESS = 1
    DONE = 2
    ABANDONED = -1

 

Oluşturduğumuz tüm enum üyeleri Enum sınıfının örnekleridir. arayarak doğrulayabilirsiniz. isinstance() gösterildiği gibi çalışır:

print(isinstance(TaskStatus.TODO,Enum))

 

Output >>> True

 

Tüm üyelerin çıktısını alalım TaskStatus enum'u bir listeye dönüştürerek:

print(list(TaskStatus))

 

Aşağıdaki çıktıyı görmelisiniz:

Output >>>

[<TaskStatus.TODO: 0>, <TaskStatus.IN_PROGRESS: 1>, <TaskStatus.DONE: 2>, <TaskStatus.ABANDONED: -1>]

 

Tüm enum üyelerinin bir isim ve değer. Yani enum üyelerine adlarını kullanarak erişebilirsiniz. TaskStatus.TODO. Veya bunlara değere göre erişirsiniz, örneğin TaskStatus(0).

Artık basit bir tane oluşturduğumuza göre TaskStatus enum, enum üyeleri üzerinde yineleme yapmak gibi basit görevlerin nasıl gerçekleştirileceğini öğrenelim.

Numaralandırmalar Üzerinde Yineleme

Python'da, herhangi bir yinelenebilir öğeyle çalıştığınız gibi numaralandırmalarla da hemen hemen aynı şekilde çalışabilirsiniz. Örneğin, şunları kullanabilirsiniz: len() enum üyelerinin sayısını sayma işlevi:

num_statuses = len(TaskStatus)
print(num_statuses)

 

Output >>> 4

 

Ayrıca liste gibi yinelenebilir bir Python üzerinde yaptığınız gibi numaralandırmalar üzerinde de yineleme yapabilirsiniz. Aşağıdaki for döngüsünde, her enum üyesinin hem adına hem de değerine erişiriz ve bunları yazdırırız:

for status in TaskStatus:
    print(status.name, status.value)

 

İşte çıktı:

Output >>> 

TODO 0
IN_PROGRESS 1
DONE 2
ABANDONED -1

Enums'ta Sipariş Verme

Örnekte durum ve karşılık gelen sayısal değer aşağıdaki gibidir:

  • YAPILACAK: 0
  • DEVAM EDİYOR: 1
  • YAPILDI: 2
  • TERK EDİLDİ: -1

Ancak varsayılan sıralamayı kullanarak da kullanabilirsiniz. auto() yardımcı işlevi. Bunu yaptığınızda, numaralandırmada 'n' üyeniz varsa, atanan değerler 1'den n'e kadardır. Ama bir başlangıç ​​değeri girebilirsiniz, mesela k, auto(k) numaralandırmanın k'den başlayıp k + n'ye kadar çıkması için.

Hadi değiştirelim TaskStatus gösterildiği gibi numaralandırma:

from enum import Enum, auto

class TaskStatus(Enum):
    TODO = auto()
    IN_PROGRESS = auto()
    DONE = auto()
    ABANDONED = auto()

 

Şimdi üyelerin çıktısını alalım:

print(list(TaskStatus))

 

Değerlerin beklendiği gibi 1'den 4'e kadar olduğunu görüyoruz:

Output >>>

[<TaskStatus.TODO: 1>, <TaskStatus.IN_PROGRESS: 2>, <TaskStatus.DONE: 3>, <TaskStatus.ABANDONED: 4>]

Şimdi bunun üzerine inşa edelim TaskStatus sahip olduğumuz numaralandırma. Çalışma dizininizde aşağıdaki numaralandırma sürümüyle bir görev.py dosyası oluşturun:

# task.py

from enum import Enum

class TaskState(Enum):
    TODO = 0
    IN_PROGRESS = 1
    DONE = 2
    ABANDONED = -1

 

Adı ve mevcut durumu olan bir görevimiz olduğunu varsayalım. Durumlar arasındaki geçerli geçişler de gösterildiği gibidir:

 

Python Enum: Python'da Numaralandırmalar Nasıl Oluşturulur
Yazara göre resim
 

Hadi bir Task sınıf:

class Task:
    def __init__(self, name, state):
        self.name = name
        self.state = state
    
    def update_state(self, new_state):
        # Define valid state transitions based on the current state
        valid_transitions = {
        	TaskState.TODO: [TaskState.IN_PROGRESS, TaskState.ABANDONED],
        	TaskState.IN_PROGRESS: [TaskState.DONE, TaskState.ABANDONED],
        	TaskState.DONE: [],
        	TaskState.ABANDONED: []
    	}
   	 
        # Check if the new state is a valid transition from the current state
        if new_state in valid_transitions[self.state]:
            self.state = new_state
        else:
            raise ValueError(f"Invalid state transition from {self.state.name} to {new_state.name}")

 

Biz var update_status() Mevcut duruma göre yeni duruma geçişin geçerli olup olmadığını kontrol eden yöntem. Geçersiz geçişler için bir ValueError istisnası oluşturulur.

İşte bunun bir örneği Task sınıf: YAPILACAKLAR durumuna sahip “Rapor Yaz” görevi:

# Create a new task with the initial state "To Do"
task = Task("Write Report", TaskState.TODO)

# Print the task details
print(f"Task Name: {task.name}")
print(f"Current State: {task.state.name}")

 

Output >>>
Task Name: Write Report
Current State: TODO

 

Görevin durumunu IN_PROGRESS olarak güncellemek geçerli bir durum geçişi olduğundan çalışmalıdır:

# Update the task state to "In Progress"
task.update_state(TaskState.IN_PROGRESS)
print(f"Updated State: {task.state.name}")

 

Output >>> Updated State: IN_PROGRESS

 

Görev tamamlandığında durumunu TAMAMLANDI olarak güncelleyebiliriz:

# Update the task state to "DONE"
task.update_state(TaskState.DONE)
print(f"Updated State: {task.state.name}")

 

Output >>> Updated State: DONE

 

Ancak durumu geçersiz bir durumla güncellemeye çalışırsanız (örneğin, TAMAMLANDI'yı TODO'ya güncellemeye çalışırsanız), ValueError istisnasıyla karşılaşırsınız:

# Attempt to update the task state to an invalid state
task.update_state(TaskState.TODO)

 

DONE'dan TODO'ya geçersiz durum geçişi nedeniyle ortaya çıkan ValueError'ın geri izlemesi aşağıda verilmiştir:

Traceback (most recent call last):
  File "/home/balapriya/enums/task.py", line 46, in 
	task.update_state(TaskState.TODO)
  File "/home/balapriya/enums/task.py", line 30, in update_state
	raise ValueError(f"Invalid state transition from {self.state.name} to {new_state.name}")
ValueError: Invalid state transition from DONE to TODO

Bu eğitimde, basit bir TaskStatus numaralandırmasını kodlayarak Python'da numaralandırmaların nasıl oluşturulacağını öğrendik. Enum üyelerine nasıl erişeceğimizi ve onları nasıl yineleyeceğimizi öğrendik. 

Ayrıca, varsayılan sıralamanın nasıl çalıştığını da öğrendik. auto() enum üyelerinin değerlerini ayarlamak için yardımcı işlev. Daha sonra daha yararlı bir örnekte TaskStatus numaralandırmasını kullanmayı denedik. 

Sen bulabilirsiniz GitHub'daki kod örnekleri. Yakında başka bir Python eğitiminde görüşürüz. O zamana kadar mutlu kodlama!
 
 

Bala Priya C Hindistan'dan bir geliştirici ve teknik yazardır. Matematik, programlama, veri bilimi ve içerik oluşturmanın kesiştiği noktada çalışmayı seviyor. İlgi ve uzmanlık alanları DevOps, veri bilimi ve doğal dil işlemeyi içerir. Okumaktan, yazmaktan, kodlama yapmaktan ve kahve içmekten hoşlanıyor! Şu anda öğreticiler, nasıl yapılır kılavuzları, fikir yazıları ve daha fazlasını yazarak öğrenmek ve bilgisini geliştirici topluluğuyla paylaşmak için çalışıyor.

spot_img

En Son İstihbarat

spot_img