2. Builtin and Keywords

2.1. Keywords

2.1.1. pass

Python domyślnie oczekuje wcięcia po dwukropku. Jeżeli chcemy zostawić klasę czy funkcję pustą, korzystamy wtedy ze słowa kluczowego pass.

def my_function():
    pass
def my_function():
    pass

my_var = my_function()
# None

2.1.2. __file__

import os

BASE_DIR = os.path.dirname(__file__)
path = os.path.join(BASE_DIR, 'main.py')

2.1.3. __name__

  • Zmienna __name__ pozwala ustalić czy dany plik jest wykonywany czy importowany.
  • Jeżeli dany plik jest wykonywany, zmienna __name__ ustawiana jest na '__main__'.
  • Jeżeli dany plik jest importowany jako moduł, zmienna __name__ ustawiana jest na nazwę modułu.
  • Jest to przydatne na przykład przy testowaniu modułów.

Dodanie do modułu poniższej linijki:

if __name__ == '__main__':
    print('hello world')

Sprawi, że wypisane na konsoli zostanie 'hello world!' jeżeli dany plik jest uruchamiany z konsoli. Powyższy kod nie wykona się natomiast jeżeli plik zaimportujemy jako moduł w innym pliku.

Przykład z życia:

import logging

log = logging.getLogger(__name__)
def run():
    ...

if __name__ == '__main__':
    # Jeżeli skrypt wywoływany jest z konsoli "z ręki" to uruchom funckję ``run()``
    # Jeżeli został zaimportowany, to ten fragment będzie zignorowany
    # I trzeba uruchomić funkcję ``run()`` samodzielnie - kontrolowanie
    run()

2.2. Builtin functions

2.2.1. range()

  • Tworzy iterator, który zwraca liczby w sekwencji.
for liczba in range(0, 5):
    print(liczba)


for liczba in range(0, 5, 2):
    print(liczba)
numbers_generator = range(0, 5)
print(numbers_generator)
# range(0, 5)
numbers_generator = range(0, 5)
numbers = list(numbers_generator)

print(numbers)  # [0, 1, 2, 3, 4]

2.2.2. isinstance()

  • Sprawdza czy dany obiekt jest instancją danej klasy
  • Jeżeli jest więcej niż jeden typ to musi być tuple a nie list lub set
isinstance(10, int)           # True
isinstance(10, float)         # False
isinstance(10, (int, float))  # True

2.2.3. bin()

  • Konwertuje liczbę na binarną
  • Nie stosuje kodu uzupełnień do dwóch
0b101111    # 47
bin(3)      # '0b11'
bin(-3)     # '-0b11'

2.2.4. hex()

  • Konwertuje liczbę na heksadecymalną
  • Konwersja kolorów w HTML
  • Shellcode
hex(99)  # '0x63'

2.2.5. oct()

  • Konwertuje liczbę na octalną
  • Przydatne do uprawnień w systemie operacyjnym
oct(33261)  # '0o100755'

2.2.6. ord()

Zwraca kod ASCII jednoznakowego stringa.

ord('a')  # 97

2.2.7. chr()

Z pozycji w tablicy ASCII konwertuje kod na znak Unicode.

chr(97)  # 'a'

2.2.8. eval()

eval('name="José Jiménez"; print(name)')
# José Jiménez

2.3. Other builtin functions

Tab. 2.3. Most used Built-in functions
Name Description
__import__  
abs()  
all()  
any()  
ascii()  
bin()  
bool()  
bytearray()  
bytes()  
callable()  
chr()  
classmethod()  
compile()  
complex()  
delattr()  
dict()  
dir()  
divmod()  
enumerate()  
eval()  
exec()  
filter()  
float()  
format()  
frozenset()  
getattr()  
globals()  
hasattr()  
hash()  
help()  
hex()  
id()  
input()  
int()  
isinstance()  
issubclass()  
iter()  
len()  
list()  
locals()  
map()  
max()  
memoryview()  
min()  
next()  
object()  
oct()  
open()  
ord()  
pow()  
print()  
property()  
range()  
repr()  
reversed()  
round()  
set()  
setattr()  
slice()  
sorted()  
staticmethod()  
str()  
sum()  
super()  
tuple()  
type()  
vars()  
zip()  

2.4. Assignments

2.4.1. Average

  • Filename: builtin_average.py
  • Lines of code to write: 12 lines
  • Estimated time of completion: 15 min
  1. Dane są pomiary Irysów:

    Code Listing 2.2. Sample Iris databases
    DATA = [
        ('Sepal length', 'Sepal width', 'Petal length', 'Petal width', 'Species'),
        (5.8, 2.7, 5.1, 1.9, 'virginica'),
        (5.1, 3.5, 1.4, 0.2, 'setosa'),
        (5.7, 2.8, 4.1, 1.3, 'versicolor'),
        (6.3, 2.9, 5.6, 1.8, 'virginica'),
        (6.4, 3.2, 4.5, 1.5, 'versicolor'),
        (4.7, 3.2, 1.3, 0.2, 'setosa'),
        (7.0, 3.2, 4.7, 1.4, 'versicolor'),
        (7.6, 3.0, 6.6, 2.1, 'virginica'),
        (4.9, 3.0, 1.4, 0.2, 'setosa'),
        (4.9, 2.5, 4.5, 1.7, 'virginica'),
        (7.1, 3.0, 5.9, 2.1, 'virginica'),
        (4.6, 3.4, 1.4, 0.3, 'setosa'),
        (5.4, 3.9, 1.7, 0.4, 'setosa'),
        (5.7, 2.8, 4.5, 1.3, 'versicolor'),
        (5.0, 3.6, 1.4, 0.3, 'setosa'),
        (5.5, 2.3, 4.0, 1.3, 'versicolor'),
        (6.5, 3.0, 5.8, 2.2, 'virginica'),
        (6.5, 2.8, 4.6, 1.5, 'versicolor'),
        (6.3, 3.3, 6.0, 2.5, 'virginica'),
        (6.9, 3.1, 4.9, 1.5, 'versicolor'),
        (4.6, 3.1, 1.5, 0.2, 'setosa'),
    ]
    
  2. Na podstawie nagłówka stwórz dict z pustymi list dla każdego z parametrów”

    values = {
        'Sepal length': [],
        'Sepal width': [],
        'Petal length': [],
        'Petal width': [],
        'Species': [],
    }
    
  3. Stwórz funkcję average(), która będzie liczyła średnią dla dowolnej ilości argumentów

    def average(args: List[float]) -> float:
        pass
    
  4. Do wyliczenia średniej, wykorzystaj wbudowane funkcje

  5. Funkcja ma wyliczać średnią tylko dla parametrów typu float, w przeciwnym wypadku zwróć None

  6. Do averages: Dict[str, float] wpisz wyliczone wartości dla każdego z parametrów

    averages = {
        'Sepal length': average(...),
        'Sepal width': average(...),
        'Petal length': average(...),
        'Petal width': average(...),
        'Species': average(...),
    }
    
  7. Wypisz na ekranie values oraz averages

The whys and wherefores:
 
  • Korzystanie z funkcji wbudowanych
  • Iterowanie po kolekcji
  • Wybieranie rekordów