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życiemrdla 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(..) - Jeśli brak instrukcji
-
Funkcje anonimowe (Lambda)
lambda x : x * 2 # odpowiednik: def func1(x) : return x * 2
Przydatne funkcje
-
Enumerate: Zwraca sekwencję krotek (indeks, wartość).
for key, val in enumerate(collection): -
Sorted: Sortuje dowolny obiekt iterowalny.
sorted([2, 1, 3]) => [1, 2, 3] -
Zip: Łączy elementy z wielu sekwencji w krotki.
zip(seq1, seq2) => [('seq1_1', 'seq2_1'), (..), ..] -
Reversed: Zwraca odwrócony iterator.
list(reversed(range(10)))
Sterowanie przepływem
-
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 -
Typowe użycie pętli ‘for’:
for element in iterator: -
‘pass’ - nic nie robi, służy jako placeholder.
-
Wyrażenie trójargumentowe:
value = true-expr if condition else false-expr -
Brak instrukcji switch/case, używa się
if/elif.
Orientacja obiektowa
-
‘object’ jest podstawą wszystkich typów w Pythonie.
-
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.
-
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') -
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
- Forma podstawowa:
try:
..
except ValueError as e:
print(e)
except (TypeError, AnotherError):
..
except:
..
finally:
..- 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.
-
Wyrażenia listowe (List comprehension): Tworzy nową listę przez filtrowanie i transformację elementów kolekcji.
[expr for val in collection if condition] -
Wyrażenia słownikowe (Dict comprehension):
{key-expr : value-expr for value in collection if condition} -
Wyrażenia zbiorowe (Set comprehension): Podobnie jak listowe, ale używa
{}zamiast[]. -
Zagnieżdżone wyrażenia listowe:
[expr for val in collection for innerVal in val if condition]