Managery kontekstu i inne ciekawe przypadki
1. Managery kontekstu
from faulty_lib import faulty_generator
# Otwieramy plik wynik.txt w trybie zapisu
with open("wynik.txt", "w") as file:
# Tworzymy pętlę nieskończoną
while True:
# Pobieramy następną wartość z generatora
value = next(faulty_generator())
# Sprawdzamy, czy generator się zakończył
if value is None:
break
# Zapisujemy wartość w pliku
file.write(value + "\n")
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2. Tworzenie własnych managerów kontekstu
class list_builder:
def __enter__(self):
# Tworzymy pustą listę i zwracamy ją jako wynik
self.result = []
return self.result
def __exit__(self, exc_type, exc_value, traceback):
# Sprawdzamy, czy w ciele wyrażenia with wystąpił wyjątek
if exc_type is None:
# Jeśli nie ma wyjątku, wypisujemy komunikat z zawartością listy
print("list has been built with elements:", self.result)
else:
# Jeśli wystąpił wyjątek, wypisujemy tylko komunikat
print("list has been built with elements:", self.result)
# Zwracamy False, aby wyjątek został przechwycony
return False
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3. Operator warunkowy
def sign(number):
return 1 if number > 0 else -1 if number < 0 else 0
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
4. Operator warunkowy - droga do szkoły
def estimate(x, t, v):
return "Yes" if t / 60 >= x / v else "No"
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
5. Operator-mors
def read_good_letters(fname):
with open(fname) as file:
content = ''
while (char := file.read(1)) != '' and char.lower() != 'k':
content += char
return content
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
6. Operator mors - analizowanie danych
from dataDispenser import nextValue
def analyze(size):
total_sum = 0 # Inicjalizujemy zmienną do przechowywania sumy wyników większych niż 3.14
for _ in range(size):
value = nextValue() # Wywołujemy funkcję nextValue() z biblioteki dataDispenser
if value > 3.14:
total_sum += value # Dodajemy wynik do sumy tylko jeśli jest większy niż 3.14
return total_sum # Zwracamy sumę wyników większych niż 3.14
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
7. Sprawdzanie typu obiektu
def compareTypes(arg1, arg2):
return isinstance(arg1, type(arg2)) # Sprawdzamy, czy typ arg1 jest taki sam jak typ arg2
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
8. Ćwiczenie: zmień typ obiektu
def switchType(arg):
if isinstance(arg, (int, float)):
return str(arg) # Jeśli argument jest liczbą, przekształć go na znakowy i zwróć
elif isinstance(arg, str):
try:
return int(arg) # Jeśli argument jest ciągiem znaków, spróbuj przekształcić go na liczbę całkowitą
except ValueError:
try:
return float(arg) # Jeśli nie uda się przekształcić na liczbę całkowitą, spróbuj na liczbę zmiennoprzecinkową
except ValueError:
return arg # Jeśli nie uda się przekształcić na liczbę, zwróć argument niezmieniony
else:
return arg # Jeśli argument nie jest ani liczbą, ani ciągiem znaków, zwróć argument niezmieniony
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -