18. Builtin and Keywords

18.1. Keywords

18.1.1. import

  • Imports module:

    import module
    
  • From module imports function:

    from module import function
    from module.submodule import function
    
  • Aliases

    import module as alias
    from module import function as alias
    
  • Relative imports:

    from . import module
    from .. import module
    
    from .module import function
    from ..module import function
    

18.1.2. 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

18.1.3. continue

Słowo kluczowe continue powoduje przerwanie aktualnie wykonywanej pętli i przejście do kolejnej iteracji.

ETC_PASSWD = """
# User Database
root:x:0:0:root:/root:/bin/bash
watney:x:1000:1000:Mark Watney:/home/watney:/bin/bash
jimenez:x:1001:1001:Jose Jimenez:/home/jimenez:/bin/bash
ivanovic:x:1002:1002:Иван Иванович:/home/ivanovic:/bin/bash
"""

for line in ETC_PASSWD:
    if line.startswith('#'):
        continue

    name = line.split(':')[4]
    print(name)
ETC_PASSWD = """
# User Database
root:x:0:0:root:/root:/bin/bash
watney:x:1000:1000:Mark Watney:/home/watney:/bin/bash
jimenez:x:1001:1001:Jose Jimenez:/home/jimenez:/bin/bash
ivanovic:x:1002:1002:Иван Иванович:/home/ivanovic:/bin/bash
"""

for line in ETC_PASSWD:
    print(line)
    continue

    # ten kod się nie wywoła
    # przydatne do zrozumienia działania funkcji i zobaczenia jaki jest aktualny element
    if line.startswith('#'):
        continue

    name = line.split(':')[4]
    print(name)

18.1.4. break

Słowo kluczowe break przerywa aktualnie wykonywaną pętlę.

while True:
    number = input('Type number: ')

    if number:
        break

18.1.5. eval()

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

18.1.6. __file__

import os

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

18.1.7. __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()

18.2. Builtin functions

18.2.1. sorted() and sort()

  • Sortują elementy listy.
  • sorted() zwraca posortowaną listę, ale nie zapisuje zmienionej kolejności
  • .sort() zmienia listę na stałe
numbers = [3, 1, 2]
sorted(numbers)
# [1, 2, 3]
print(numbers)
# [3, 1, 2]
numbers = [3, 1, 2]
numbers.sort()  # returns None
print(numbers)
# [1, 2, 3]

18.2.2. 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]

18.2.3. 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

18.2.4. min()

Wartość minimalna z listy.

numbers = [1, 2, 3, 4, 5]

min(numbers)  # 1
min(3, 1, 5)  # 1

18.2.5. max()

Wartość maksymalna z listy.

numbers = [1, 2, 3, 4, 5]

max(numbers)  # 5
max(3, 1, 5)  # 5

18.2.6. len()

Długość listy, tuple, stringa itp.

numbers = [1, 2, 3, 4, 5]

len(numbers)                   # 5
len('Max')                     # 3
len({'id': 3, 'name': 'Max'})  # 2

18.2.7. bin()

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

18.2.8. hex()

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

18.2.9. oct()

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

18.2.10. ord()

Zwraca kod ASCII jednoznakowego stringa.

ord('a')  # 97

18.2.11. chr()

Z pozycji w tablicy ASCII konwertuje kod na znak Unicode.

chr(97)  # 'a'

18.3. Other builtin functions

Tab. 18.1. 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()  

18.4. Assignments

18.4.1. Average

  1. Dane są pomiary Irysów z Code Listing 18.1.

  2. Stwórz dict, który będzie przechowywał list pomiarów dla każdego parametru:

    • Sepal length
    • Sepal width
    • Petal length
    • Petal width
  3. Policz średnią dla każdego z elementów tego dict i zapisz je w dict, o strukturze: nazwa parametru -> średnia

  4. Wypisz na ekranie oba dict

Code Listing 18.1. Sample Iris databases
DATA = [
    ('Sepal length', 'Sepal width', 'Petal length', 'Petal width', 'Species'),
    (5.1, 3.5, 1.4, 0.2, 'setosa'),
    (4.9, 3.0, 1.4, 0.2, 'setosa'),
    (4.7, 3.2, 1.3, 0.2, 'setosa'),
    (4.6, 3.1, 1.5, 0.2, 'setosa'),
    (5.0, 3.6, 1.4, 0.3, 'setosa'),
    (5.4, 3.9, 1.7, 0.4, 'setosa'),
    (4.6, 3.4, 1.4, 0.3, 'setosa'),
    (7.0, 3.2, 4.7, 1.4, 'versicolor'),
    (6.4, 3.2, 4.5, 1.5, 'versicolor'),
    (6.9, 3.1, 4.9, 1.5, 'versicolor'),
    (5.5, 2.3, 4.0, 1.3, 'versicolor'),
    (6.5, 2.8, 4.6, 1.5, 'versicolor'),
    (5.7, 2.8, 4.5, 1.3, 'versicolor'),
    (5.7, 2.8, 4.1, 1.3, 'versicolor'),
    (6.3, 3.3, 6.0, 2.5, 'virginica'),
    (5.8, 2.7, 5.1, 1.9, 'virginica'),
    (7.1, 3.0, 5.9, 2.1, 'virginica'),
    (6.3, 2.9, 5.6, 1.8, 'virginica'),
    (6.5, 3.0, 5.8, 2.2, 'virginica'),
    (7.6, 3.0, 6.6, 2.1, 'virginica'),
    (4.9, 2.5, 4.5, 1.7, 'virginica'),
]
About:
  • Filename: builtin_average.py
  • Lines of code to write: 12 lines
  • Estimated time of completion: 15 min
The whys and wherefores:
 
  • Korzystanie z funkcji wbudowanych
  • Iterowanie po kolekcji
  • Wybieranie rekordów