Skip to content

Python Ściąga

Python to wieloplatformowy język programowania. Jest to zorientowany obiektowo, dynamicznie typowany język, który pierwotnie został zaprojektowany do pisania skryptów automatyzacji (shell). Wraz z ciągłymi aktualizacjami wersji i nowymi funkcjami języka, coraz częściej jest wykorzystywany do tworzenia niezależnych, dużych projektów.

Ogólne

  • Python odróżnia wielkość liter
  • Indeksowanie w Pythonie zaczyna się od 0
  • Python używa białych znaków (tabulatorów lub spacji) do wcięć kodu zamiast klamer.

Pomoc

Strona główna pomocy help()
Pomoc dla funkcji help(str.replace)
Pomoc dla modułu help(re)

Moduły (Biblioteki)

Lista zawartości modułu dir(module1)
Ładowanie modułu import module1 *
Wywołanie funkcji z modułu module1.func1()

Instrukcja import tworzy nową przestrzeń nazw i wykonuje wszystkie instrukcje w skojarzonym pliku .py. Jeśli chcesz załadować zawartość modułu do bieżącej przestrzeni nazw, użyj from module1 import *.

Typy skalarne

Sprawdzanie typu danych: type(variable)

Liczby całkowite

int/long - Duże liczby całkowite są automatycznie konwertowane na long.

Liczby zmiennoprzecinkowe

float - 64-bitowy, brak typu “double”.

Typ boolowski

bool - Prawda (True) lub Fałsz (False).

Ciągi znaków (Strings)

str - Domyślnie w Pythonie 2.x: ASCII; w Pythonie 3: Unicode.

  • Ciągi znaków mogą być w cudzysłowie pojedynczym, podwójnym lub potrójnym.
  • String jest sekwencją znaków, więc może być traktowany jak inne sekwencje.
  • Znaki specjalne mogą być poprzedzone znakiem \ lub użyciem r dla raw strings.
    str1 = r'this\f?ff'
  • Formatowanie ciągu można osiągnąć na kilka sposobów:
    template = '%.2f %s haha $%d'
    str1 = template % (4.88, 'hola', 2)

str(), bool(), int() i float() to również funkcje jawnej konwersji typów.

Wartość pusta

NoneType(None) - Wartość ’null’ w Pythonie (istnieje tylko jedna instancja obiektu None).

  • None nie jest zastrzeżonym słowem kluczowym, lecz jedyną instancją “NoneType”.
  • None jest powszechną wartością domyślną dla opcjonalnych parametrów funkcji:
    def func1(a, b, c = None)
  • Typowe zastosowanie None:
    if variable is None:

Data i Czas

datetime - Wbudowany moduł “datetime” zapewnia typy takie jak “datetime”, “date”, “time”.

  • “datetime” łączy informacje przechowywane w “date” i “time”.
    Utwórz datę/czas z ciągu dt1 = datetime.strptime(‘20091031’, ‘%Y%m%d’)
    Pobierz obiekt “date” dt1.date()
    Pobierz obiekt “time” dt1.time()
    Formatuj datę/czas jako string dt1.strftime(’%m/%d/%Y %H:%M’)
    Modyfikuj pola dt2 = dt1.replace(minute=0, second=30)
    Oblicz różnicę diff = dt1 - dt2 # diff to obiekt ‘datetime.timedelta’

Struktury Danych

Krotki (Tuples)

Krotka to sekwencja o stałej długości, której nie można modyfikować.

Tworzenie krotki tup1=4,5,6 lub tup1 = (6,7,8)
Tworzenie krotek zagnieżdżonych tup1 = (4,5,6), (7,8)
Konwersja sekwencji/iteratora na krotkę tuple([1, 0, 2])
Łączenie krotek tup1 + tup2
Rozpakowywanie krotki a, b, c = tup1
Zamiana zmiennych b, a = a, b

Listy

Lista to sekwencja o zmiennej długości z modyfikowalnymi elementami.

Tworzenie listy list1 = [1, ‘a’, 3] lub list1 = list(tup1)
Łączenie list list1 + list2 lub list1.extend(list2)
Dodawanie do listy list1.append(‘b’)
Wstawianie na pozycję list1.insert(posIdx, ‘b’)
Usuwanie elementu przez indeks valueAtIdx = list1.pop(posIdx)
Usuwanie pierwszej napotkanej wartości list1.remove(‘a’)
Sprawdzanie czy wartość jest w liście 3 in list1 => True
Sortowanie listy list1.sort()
Sortowanie z funkcją list1.sort(key=len) # według długości

Uwaga:

  • Indeks “start” jest włączny, ale “stop” jest wyłączny.
  • start/stop można pominąć, domyślnie oznaczają początek/koniec.

Wycinanie (Slicing)

Typy sekwencyjne obejmują ‘str’, ‘array’, ’tuple’, ’list’ itp.

list1[start:stop]
list1[start:stop:step]
list1[::2]
str1[::-1]

Słowniki (Hash)

Tworzenie słownika dict1 = {‘key1’ : ‘value1’, 2 : [3, 2]}
Tworzenie słownika przez zip dict(zip(keyList, valueList))
Pobieranie elementu dict1[‘key1’]
Zmiana/dodawanie elementu dict1[‘key1’] = ’newValue’
Pobieranie wartości z domyślną dict1.get(‘key1’, defaultValue)
Sprawdzanie klucza ‘key1’ in dict1
Usuwanie elementu del dict1[‘key1’]
Lista kluczy dict1.keys()
Lista wartości dict1.values()
Aktualizacja słownika dict1.update(dict2)

Zbiory (Sets)

Zbiór to nieuporządkowana kolekcja unikalnych elementów.

Tworzenie zbioru set([3, 6, 3]) lub {3, 6, 3}
Sprawdzanie podzbioru set1.issubset(set2)
Sprawdzanie nadzbioru set1.issuperset(set2)
Sprawdzanie równości set1 == set2
Suma (or) set1
Przecięcie (and) set1 & set2
Różnica set1 - set2
Różnica symetryczna (xor) set1 ^ set2

Funkcje

  • Forma podstawowa

    def func1(posArg1, keywordArg1 = 1, ..):
  • “Funkcje są obiektami” - typowy wzorzec:

    def func1(ops = [str.strip, user_define_func, ..], ..):
        for function in ops:
            value = function(value)
  • Zwracanie wartości

    • Jeśli brak instrukcji return, funkcja nie zwraca nic (None).
    • Zwracanie wielu wartości przez krotkę:
     return (value1, value2)
     value1, value2 = func1(..)
  • Funkcje anonimowe (Lambda)

    lambda x : x * 2
    # odpowiednik: def func1(x) : return x * 2

Przydatne funkcje

  1. Enumerate: Zwraca sekwencję krotek (indeks, wartość).

    for key, val in enumerate(collection):
  2. Sorted: Sortuje dowolny obiekt iterowalny.

    sorted([2, 1, 3]) => [1, 2, 3]
  3. Zip: Łączy elementy z wielu sekwencji w krotki.

    zip(seq1, seq2) => [('seq1_1', 'seq2_1'), (..), ..]
  4. Reversed: Zwraca odwrócony iterator.

    list(reversed(range(10)))

Sterowanie przepływem

  1. Operatory warunkowe:

    Czy obiekty są identyczne var1 is var2
    Czy obiekty są różne var1 is not var2
    Czy wartości są równe var1 == var2
  2. Typowe użycie pętli ‘for’:

    for element in iterator:
  3. ‘pass’ - nic nie robi, służy jako placeholder.

  4. Wyrażenie trójargumentowe:

    value = true-expr if condition else false-expr
  5. Brak instrukcji switch/case, używa się if/elif.

Orientacja obiektowa

  1. ‘object’ jest podstawą wszystkich typów w Pythonie.

  2. Każda rzecz (liczba, ciąg, funkcja, klasa, moduł) jest obiektem i ma swój ’type’. Zmienne są wskaźnikami do miejsca w pamięci.

  3. Podstawowa forma klasy:

    class MyObject(object):
        # 'self' jest odpowiednikiem 'this' w Javie/C++
        def __init__(self, name):
            self.name = name
    
        def memberFunc1(self, arg1):
            ..
    
        @staticmethod
        def classFunc2(arg1):
            ..
    
    obj1 = MyObject('name1') 
    obj1.memberFunc1('a') 
    MyObject.classFunc2('b')
  4. Narzędzie inspekcji:

    dir(variable1) # Lista wszystkich dostępnych metod obiektu

Operacje na ciągach znaków

Łączenie listy/krotki za pomocą separatora:

', '.join([ 'v1', 'v2', 'v3']) => 'v1, v2, v3'

Formatowanie ciągu:

string1 = 'My name is {0} {name}'
newString1 = string1.format('Sean', name = 'Chen')

Rozdzielanie ciągu:

sep = '-'
stringList1 = string1.split(sep)

Wycinanie fragmentu:

start = 1
string1[start:8]

Dopełnianie zerami:

month = '5'
month.zfill(2) => '05' 

Obsługa wyjątków

  1. Forma podstawowa:
try:
    ..
except ValueError as e:
    print(e)
except (TypeError, AnotherError):
    ..
except:
    ..
finally:
    ..
  1. Ręczne zgłaszanie wyjątków:
raise AssertionError # Błąd asercji
raise SystemExit # Prośba o zakończenie programu
raise RuntimeError('Error message :..')

Wyrażenia listowe, zbiorowe i słownikowe (Comprehensions)

Cukier składniowy ułatwiający pisanie czytelnego kodu.

  1. Wyrażenia listowe (List comprehension): Tworzy nową listę przez filtrowanie i transformację elementów kolekcji.

    [expr for val in collection if condition]
  2. Wyrażenia słownikowe (Dict comprehension):

    {key-expr : value-expr for value in collection if condition}
  3. Wyrażenia zbiorowe (Set comprehension): Podobnie jak listowe, ale używa {} zamiast [].

  4. Zagnieżdżone wyrażenia listowe:

    [expr for val in collection for innerVal in val if condition]