Python Language Samouczek
Pierwsze kroki w języku Python
Szukaj…
Uwagi
Python jest powszechnie używanym językiem programowania. To jest:
Wysoki poziom : Python automatyzuje operacje niskiego poziomu, takie jak zarządzanie pamięcią. Pozostawia programistom nieco mniej kontroli, ale ma wiele zalet, w tym czytelność kodu i minimalne wyrażenia kodu.
Ogólnego zastosowania : Python jest zbudowany do użycia we wszystkich kontekstach i środowiskach. Przykładem języka nieprzeznaczonego do użytku ogólnego jest PHP: został on zaprojektowany specjalnie jako język skryptowy do tworzenia stron WWW po stronie serwera. W przeciwieństwie do tego, Python może być wykorzystywany do tworzenia stron WWW po stronie serwera, ale także do budowania aplikacji komputerowych.
Typowanie dynamiczne : każda zmienna w Pythonie może odwoływać się do dowolnego rodzaju danych. Pojedyncze wyrażenie może oceniać dane różnych typów w różnym czasie. Z tego powodu możliwy jest następujący kod:
if something: x = 1 else: x = 'this is a string' print(x)
Mocno wpisane : podczas wykonywania programu nie wolno robić niczego, co jest niezgodne z rodzajem danych, z którymi pracujesz. Na przykład nie ma ukrytych konwersji ciągów na liczby; ciąg złożony z cyfr nigdy nie będzie traktowany jako liczba, chyba że zostanie on jawnie przekonwertowany:
1 + '1' # raises an error 1 + int('1') # results with 2
Przyjazny dla początkujących :) : Składnia i struktura Pythona są bardzo intuicyjne. Jest na wysokim poziomie i zapewnia konstrukcje umożliwiające pisanie przejrzystych programów zarówno na małą, jak i na dużą skalę. Python obsługuje wiele paradygmatów programowania, w tym programowanie obiektowe, imperatywne i funkcjonalne lub style proceduralne. Ma dużą, kompleksową bibliotekę standardową i wiele łatwych do zainstalowania bibliotek stron trzecich.
Jego zasady projektowania są przedstawione w Zen of Python .
Obecnie istnieją dwie główne gałęzie wydania Pythona, które mają pewne znaczące różnice. Python 2.x jest starszą wersją, choć nadal jest szeroko stosowany. Python 3.x wprowadza zestaw niezgodnych wstecz zmian, które mają na celu ograniczenie duplikacji funkcji. Aby dowiedzieć się, która wersja jest dla Ciebie najlepsza, zobacz ten artykuł .
Oficjalna dokumentacja Pythona jest także wszechstronnym i użytecznym źródłem, zawierającym dokumentację dla wszystkich wersji Pythona, a także samouczki, które pomogą Ci zacząć.
Istnieje jedna oficjalna implementacja języka dostarczonego przez Python.org, ogólnie określana jako CPython, oraz kilka alternatywnych implementacji języka na innych platformach wykonawczych. Należą do nich IronPython (uruchamianie Pythona na platformie .NET), Jython (w środowisku wykonawczym Java) i PyPy (implementacja Pythona w jego podzbiorze).
Wersje
Python 3.x
Wersja | Data wydania |
---|---|
[3.7] | 2017-05-08 |
3.6 | 23.12.2016 |
3.5 | 13.09.2015 |
3.4 | 17.03.2014 |
3.3 | 29.09.2012 |
3.2 | 2011-02-20 |
3.1 | 26.06.2009 |
3.0 | 2008-12-03 |
Python 2.x
Wersja | Data wydania |
---|---|
2.7 | 2010-07-03 |
2.6 | 02.10.2008 |
2.5 | 2006-09-19 |
2.4 | 2004-11-30 |
2.3 | 2003-07-29 |
2.2 | 2001-12-21 |
2.1 | 2001-04-15 |
2.0 | 2000-10-16 |
Pierwsze kroki
Python to szeroko stosowany język programowania wysokiego poziomu do programowania ogólnego, stworzony przez Guido van Rossuma i wydany po raz pierwszy w 1991 roku. Python oferuje system dynamicznego typu i automatyczne zarządzanie pamięcią oraz obsługuje wiele paradygmatów programowania, w tym obiektowe, imperatywne, programowanie funkcjonalne i style proceduralne. Ma dużą i kompleksową standardową bibliotekę.
Aktualnie używane są dwie główne wersje Pythona:
- Python 3.x jest aktualną wersją i jest w fazie rozwoju.
- Python 2.x jest starszą wersją i będzie otrzymywać tylko aktualizacje bezpieczeństwa do 2020 r. Nie zostaną wprowadzone żadne nowe funkcje. Zauważ, że wiele projektów nadal korzysta z Python 2, chociaż migracja do Python 3 jest coraz łatwiejsza.
Możesz pobrać i zainstalować dowolną wersję Pythona tutaj . Zobacz porównanie między Python 3 a Python 2 . Ponadto niektóre firmy zewnętrzne oferują przepakowane wersje Pythona, które dodają często używane biblioteki i inne funkcje ułatwiające konfigurację do typowych przypadków użycia, takich jak matematyka, analiza danych lub zastosowania naukowe. Zobacz listę na oficjalnej stronie .
Sprawdź, czy Python jest zainstalowany
Aby potwierdzić, że Python został poprawnie zainstalowany, możesz to sprawdzić, uruchamiając następujące polecenie w swoim ulubionym terminalu (jeśli używasz systemu operacyjnego Windows, musisz dodać ścieżkę Pythona do zmiennej środowiskowej przed użyciem go w wierszu polecenia):
$ python --version
Jeśli masz zainstalowany Python 3 i jest to Twoja domyślna wersja (więcej informacji na temat rozwiązywania problemów ), powinieneś zobaczyć coś takiego:
$ python --version
Python 3.6.0
Jeśli masz zainstalowany Python 2 i jest to Twoja domyślna wersja (więcej informacji na temat rozwiązywania problemów ), powinieneś zobaczyć coś takiego:
$ python --version
Python 2.7.13
Jeśli zainstalowałeś Python 3, ale $ python --version
wyświetla wersję Python 2, masz również zainstalowany Python 2. Często dzieje się tak w MacOS i wielu dystrybucjach Linuksa. $ python3
tego użyj $ python3
aby jawnie użyć interpretera Python 3.
Witaj, World in Python przy użyciu IDLE
IDLE to prosty edytor dla Pythona, dostarczany w pakiecie z Pythonem.
Jak stworzyć program Hello, World w IDLE
- Otwórz IDLE w wybranym systemie.
- W starszych wersjach systemu Windows można go znaleźć w
All Programs
w menu Windows. - W Windows 8+ wyszukaj
IDLE
lub znajdź go w aplikacjach obecnych w twoim systemie. - W systemach uniksowych (w tym Mac) możesz otworzyć go z powłoki, wpisując
$ idle python_file.py
.
- W starszych wersjach systemu Windows można go znaleźć w
- Otworzy się powłoka z opcjami u góry.
W powłoce pojawia się monit o trzy nawiasy prostokątne:
>>>
Teraz napisz następujący kod w wierszu:
>>> print("Hello, World")
Naciśnij Enter .
>>> print("Hello, World")
Hello, World
Plik Hello World Python
Utwórz nowy plik hello.py
który zawiera następujący wiersz:
print('Hello, World')
Możesz użyć funkcji print
Python 3 w Python 2 z następującą instrukcją import
:
from __future__ import print_function
Python 2 ma wiele funkcji, które można opcjonalnie zaimportować z Pythona 3 za pomocą modułu __future__
, jak omówiono tutaj .
Jeśli używasz Python 2, możesz także wpisać poniższy wiersz. Zauważ, że nie jest to poprawne w Pythonie 3 i dlatego nie jest zalecane, ponieważ zmniejsza zgodność kodu między wersjami.
print 'Hello, World'
W swoim terminalu przejdź do katalogu zawierającego plik hello.py
.
Wpisz python hello.py
, a następnie naciśnij klawisz Enter .
$ python hello.py
Hello, World
Powinieneś zobaczyć Hello, World
wydrukowany na konsoli.
Możesz także zastąpić hello.py
ścieżką do pliku. Na przykład, jeśli plik znajduje się w katalogu domowym, a użytkownik jest „użytkownikiem” w systemie Linux, możesz wpisać python /home/user/hello.py
.
Uruchom interaktywną powłokę Pythona
Wykonując (uruchamiając) komendę python
w swoim terminalu, otrzymujesz interaktywną powłokę Pythona. Jest to również znane jako interpreter języka Python lub REPL (w przypadku „Read Evaluate Print Loop”).
$ python
Python 2.7.12 (default, Jun 28 2016, 08:46:01)
[GCC 6.1.1 20160602] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print 'Hello, World'
Hello, World
>>>
Jeśli chcesz uruchomić Python 3 z terminala, uruchom polecenie python3
.
$ python3
Python 3.6.0 (default, Jan 13 2017, 00:00:00)
[GCC 6.1.1 20160602] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('Hello, World')
Hello, World
>>>
Alternatywnie uruchom interaktywny monit i załaduj plik za pomocą python -i <file.py>
.
W wierszu polecenia uruchom:
$ python -i hello.py
"Hello World"
>>>
Istnieje wiele sposobów zamknięcia powłoki Python:
>>> exit()
lub
>>> quit()
Alternatywnie, CTRL + D zamknie powłokę i przeniesie cię z powrotem do linii poleceń twojego terminala.
Jeśli chcesz anulować polecenie, jesteś w trakcie pisania i powrócić do czystego wiersza polecenia, pozostając w powłoce interpretera, użyj CTRL + C.
Wypróbuj interaktywną powłokę Python online .
Inne powłoki online
Różne strony internetowe zapewniają dostęp online do powłok Pythona.
Powłoki online mogą być przydatne do następujących celów:
- Uruchom mały fragment kodu z komputera, na którym nie ma instalacji Pythona (smartfony, tablety itp.).
- Naucz się lub naucz podstawowego języka Python.
- Rozwiązywanie problemów z oceną online.
Przykłady:
Oświadczenie: autor (autorzy) dokumentacji nie są powiązani z żadnymi zasobami wymienionymi poniżej.
- https://www.python.org/shell/ - Internetowa powłoka Python hostowana przez oficjalną stronę Python.
- https://ideone.com/ - Szeroko stosowany w sieci w celu zilustrowania zachowania fragmentu kodu.
- https://repl.it/languages/python3 - Potężny i prosty kompilator online, IDE i interpreter. Koduj, kompiluj i uruchamiaj kod w Pythonie.
- https://www.tutorialspoint.com/execute_python_online.php - W pełni funkcjonalna powłoka UNIX i przyjazny dla użytkownika eksplorator projektów.
- http://rextester.com/l/python3_online_compiler - Proste i łatwe w użyciu IDE, które pokazuje czas wykonania
Uruchamiaj polecenia jako ciąg
Pythonowi można przekazać dowolny kod jako ciąg znaków w powłoce:
$ python -c 'print("Hello, World")'
Hello, World
Może to być przydatne podczas łączenia wyników skryptów w powłoce.
Muszle i nie tylko
Zarządzanie pakietami - Zalecanym narzędziem PyPA do instalowania pakietów Python jest PIP . Aby zainstalować, w wierszu polecenia uruchom pip install <the package name>
. Na przykład pip install numpy
. (Uwaga: W python -m pip install <the package name>
Windows musisz dodać pip do zmiennych środowiskowych PATH. Aby tego uniknąć, użyj python -m pip install <the package name>
)
Powłoki - do tej pory omawialiśmy różne sposoby uruchamiania kodu przy użyciu natywnej interaktywnej powłoki Pythona. Powłoki używają mocy interpretacyjnej Pythona do eksperymentowania z kodem w czasie rzeczywistym. Alternatywne powłoki to IDLE - wstępnie dołączony GUI, IPython - znany z rozszerzania interaktywnego doświadczenia itp.
Programy - w celu przechowywania długoterminowego możesz zapisywać zawartość w plikach .py i edytować / wykonywać je jako skrypty lub programy za pomocą zewnętrznych narzędzi, np. Powłoki, IDE (takich jak PyCharm ), notatników Jupyter itp. Użytkownicy pośredni mogą korzystać z tych narzędzi; jednak metody omówione tutaj są wystarczające, aby zacząć.
Korepetytor w Pythonie pozwala ci przechodzić przez kod Pythona, dzięki czemu możesz wizualizować przebieg programu i pomaga zrozumieć, gdzie popełnił błąd.
PEP8 definiuje wytyczne dotyczące formatowania kodu Pythona. Dobre formatowanie kodu jest ważne, abyś mógł szybko przeczytać, co robi kod.
Tworzenie zmiennych i przypisywanie wartości
Aby utworzyć zmienną w Pythonie, wystarczy podać nazwę zmiennej, a następnie przypisać jej wartość.
<variable name> = <value>
Python używa =
do przypisywania wartości do zmiennych. Nie ma potrzeby wcześniejszego deklarowania zmiennej (ani przypisywania jej typu danych), przypisywanie wartości samej zmiennej deklaruje i inicjuje zmienną tą wartością. Nie ma możliwości zadeklarowania zmiennej bez przypisania jej wartości początkowej.
# Integer
a = 2
print(a)
# Output: 2
# Integer
b = 9223372036854775807
print(b)
# Output: 9223372036854775807
# Floating point
pi = 3.14
print(pi)
# Output: 3.14
# String
c = 'A'
print(c)
# Output: A
# String
name = 'John Doe'
print(name)
# Output: John Doe
# Boolean
q = True
print(q)
# Output: True
# Empty value or null data type
x = None
print(x)
# Output: None
Zmienne przypisanie działa od lewej do prawej. Zatem poniższe polecenie spowoduje błąd składniowy.
0 = x
=> Output: SyntaxError: can't assign to literal
Nie można używać słów kluczowych Pythona jako prawidłowej nazwy zmiennej. Możesz zobaczyć listę słów kluczowych według:
import keyword
print(keyword.kwlist)
Zasady nazywania zmiennych:
- Nazwy zmiennych muszą zaczynać się od litery lub znaku podkreślenia.
x = True # valid
_y = True # valid
9x = False # starts with numeral
=> SyntaxError: invalid syntax
$y = False # starts with symbol
=> SyntaxError: invalid syntax
- Pozostała część nazwy zmiennej może składać się z liter, cyfr i znaków podkreślenia.
has_0_in_it = "Still Valid"
- W nazwach rozróżniana jest wielkość liter.
x = 9
y = X*5
=>NameError: name 'X' is not defined
Chociaż nie ma potrzeby określania typu danych podczas deklarowania zmiennej w Pythonie, przy przydzielaniu niezbędnego obszaru w pamięci dla zmiennej, interpreter Pythona automatycznie wybiera najbardziej odpowiedni wbudowany typ dla niej:
a = 2
print(type(a))
# Output: <type 'int'>
b = 9223372036854775807
print(type(b))
# Output: <type 'int'>
pi = 3.14
print(type(pi))
# Output: <type 'float'>
c = 'A'
print(type(c))
# Output: <type 'str'>
name = 'John Doe'
print(type(name))
# Output: <type 'str'>
q = True
print(type(q))
# Output: <type 'bool'>
x = None
print(type(x))
# Output: <type 'NoneType'>
Teraz, gdy znasz podstawy przypisywania, usuńmy tę subtelność dotyczącą przypisywania w pythonie.
Kiedy używasz =
aby wykonać operację przypisania, to po lewej stronie =
jest nazwa obiektu po prawej stronie. Wreszcie, co =
robi, przypisuje odwołanie do obiektu po prawej stronie do nazwy po lewej stronie.
To jest:
a_name = an_object # "a_name" is now a name for the reference to the object "an_object"
Tak więc, od wielu przykładów przypisania powyżej, jeżeli możemy odebrać pi = 3.14
, następnie pi
jest nazwą (nie nazwę, ponieważ obiekt może mieć wiele nazw) dla obiektu 3.14
. Jeśli nie rozumiesz czegoś poniżej, wróć do tego punktu i przeczytaj to jeszcze raz! Możesz także przyjrzeć się temu, aby lepiej zrozumieć.
Możesz przypisać wiele wartości do wielu zmiennych w jednym wierszu. Zauważ, że po prawej i lewej stronie operatora =
musi znajdować się taka sama liczba argumentów:
a, b, c = 1, 2, 3
print(a, b, c)
# Output: 1 2 3
a, b, c = 1, 2
=> Traceback (most recent call last):
=> File "name.py", line N, in <module>
=> a, b, c = 1, 2
=> ValueError: need more than 2 values to unpack
a, b = 1, 2, 3
=> Traceback (most recent call last):
=> File "name.py", line N, in <module>
=> a, b = 1, 2, 3
=> ValueError: too many values to unpack
Błąd w ostatnim przykładzie można usunąć, przypisując pozostałe wartości do równej liczby dowolnych zmiennych. Ta zmienna fikcyjna może mieć dowolną nazwę, ale konwencjonalne jest używanie podkreślnika ( _
) do przypisywania niepożądanych wartości:
a, b, _ = 1, 2, 3
print(a, b)
# Output: 1, 2
Zauważ, że liczba _ i liczba pozostałych wartości muszą być równe. W przeciwnym razie wyrzucane jest „zbyt wiele wartości, aby rozpakować błąd”, jak wyżej:
a, b, _ = 1,2,3,4
=>Traceback (most recent call last):
=>File "name.py", line N, in <module>
=>a, b, _ = 1,2,3,4
=>ValueError: too many values to unpack (expected 3)
Możesz także przypisać jedną wartość do kilku zmiennych jednocześnie.
a = b = c = 1
print(a, b, c)
# Output: 1 1 1
Przy stosowaniu takiego przypisania kaskadowego należy zauważyć, że wszystkie trzy zmienne a
, b
i c
odnoszą się do tego samego obiektu w pamięci, obiektu int
o wartości 1. Innymi słowy, a
, b
i c
to trzy różne nazwy podany do tego samego obiektu int. Przypisanie innego obiektu do jednego z nich później nie zmienia innych, zgodnie z oczekiwaniami:
a = b = c = 1 # all three names a, b and c refer to same int object with value 1
print(a, b, c)
# Output: 1 1 1
b = 2 # b now refers to another int object, one with a value of 2
print(a, b, c)
# Output: 1 2 1 # so output is as expected.
Powyższe dotyczy również typów zmiennych (takich jak list
, dict
itp.), Podobnie jak typy niezmienne (takie jak int
, string
, tuple
itp.):
x = y = [7, 8, 9] # x and y refer to the same list object just created, [7, 8, 9]
x = [13, 8, 9] # x now refers to a different list object just created, [13, 8, 9]
print(y) # y still refers to the list it was first assigned
# Output: [7, 8, 9]
Jak na razie dobrze. Sytuacja wygląda nieco inaczej, jeśli chodzi o modyfikację obiektu (w przeciwieństwie do przypisywania nazwy innemu obiektowi, co zrobiliśmy powyżej), gdy przypisanie kaskadowe jest używane dla typów zmiennych. Spójrz poniżej, a zobaczysz to z pierwszej ręki:
x = y = [7, 8, 9] # x and y are two different names for the same list object just created, [7, 8, 9]
x[0] = 13 # we are updating the value of the list [7, 8, 9] through one of its names, x in this case
print(y) # printing the value of the list using its other name
# Output: [13, 8, 9] # hence, naturally the change is reflected
Listy zagnieżdżone są również poprawne w Pythonie. Oznacza to, że lista może zawierać inną listę jako element.
x = [1, 2, [3, 4, 5], 6, 7] # this is nested list
print x[2]
# Output: [3, 4, 5]
print x[2][1]
# Output: 4
Wreszcie, zmienne w Pythonie nie muszą pozostać tego samego typu, co zostały zdefiniowane po raz pierwszy - możesz po prostu użyć =
aby przypisać nową wartość do zmiennej, nawet jeśli ta wartość jest innego typu.
a = 2
print(a)
# Output: 2
a = "New value"
print(a)
# Output: New value
Jeśli ci to przeszkadza, pomyśl o tym, że to, co jest po lewej stronie =
to tylko nazwa obiektu. Najpierw wywołujesz obiekt int
o wartości 2 a
, następnie zmieniasz zdanie i decydujesz się na nadać nazwę a
obiektowi string
o wartości „Nowa wartość”. Proste, prawda?
Wprowadzane przez użytkownika
Wejście interaktywne
Aby uzyskać dane wejściowe od użytkownika, użyj funkcji input
( uwaga : w Pythonie 2.x funkcja nazywa się zamiast tego raw_input
, chociaż Python 2.x ma własną wersję danych input
która jest zupełnie inna):
name = raw_input("What is your name? ")
# Out: What is your name? _
Uwaga dotycząca bezpieczeństwa Nie używaj
input()
w Python2 - wprowadzony tekst będzie oceniany tak, jakby był wyrażeniem Python (równoważnymeval(input())
w Python3), co może łatwo stać się podatnością. Więcej informacji na temat ryzyka związanego z korzystaniem z tej funkcji można znaleźć w tym artykule .
name = input("What is your name? ")
# Out: What is your name? _
Pozostała część tego przykładu będzie używać składni Python 3.
Funkcja pobiera argument ciągu, który wyświetla go jako monit i zwraca ciąg. Powyższy kod wyświetla monit, który oczekuje na wprowadzenie danych przez użytkownika.
name = input("What is your name? ")
# Out: What is your name?
Jeśli użytkownik wpisze „Bob”, a hity wejdą, name
zmiennej zostanie przypisana do ciągu "Bob"
:
name = input("What is your name? ")
# Out: What is your name? Bob
print(name)
# Out: Bob
Zauważ, że dane input
są zawsze typu str
, co jest ważne, jeśli chcesz, aby użytkownik wprowadzał liczby. Dlatego musisz przekonwertować str
zanim spróbujesz użyć go jako liczby:
x = input("Write a number:")
# Out: Write a number: 10
x / 2
# Out: TypeError: unsupported operand type(s) for /: 'str' and 'int'
float(x) / 2
# Out: 5.0
Uwaga: Zaleca się stosowanie bloków try
/ except
do wychwytywania wyjątków podczas obsługi danych wejściowych użytkownika . Na przykład, jeśli twój kod chce rzutować raw_input
na int
, a to, co pisze użytkownik, jest nie do wyemitowania, wywołuje błąd ValueError
.
IDLE - graficzny interfejs użytkownika w języku Python
IDLE jest zintegrowanym środowiskiem programistycznym i edukacyjnym Pythona i jest alternatywą dla wiersza poleceń. Jak sama nazwa wskazuje, IDLE jest bardzo przydatne do tworzenia nowego kodu lub uczenia się języka Python. W systemie Windows jest on wyposażony w interpreter języka Python, ale w innych systemach operacyjnych może być konieczne zainstalowanie go za pośrednictwem menedżera pakietów.
Główne cele IDLE to:
- Edytor tekstu z wieloma oknami z podświetlaniem składni, autouzupełnianiem i inteligentnym wcięciem
- Powłoka Python z podświetlaniem składni
- Zintegrowany debugger z krokami, trwałymi punktami przerwania i widocznością stosu wywołań
- Automatyczne wcięcie (przydatne dla początkujących, którzy poznają wcięcie Pythona)
- Zapisywanie programu Python jako plików .py, uruchamianie i edytowanie ich później w dowolnym przy użyciu IDLE.
W IDLE, naciśnij F5
lub run Python Shell
aby uruchomić interpreter. Korzystanie z IDLE może być lepszym doświadczeniem dla nowych użytkowników, ponieważ kod jest interpretowany podczas pisania przez użytkownika.
Pamiętaj, że istnieje wiele alternatyw, zobacz na przykład tę dyskusję lub tę listę .
Rozwiązywanie problemów
Windows
W systemie Windows domyślnym poleceniem jest
python
. Jeśli pojawi się błąd"'python' is not recognized"
, najbardziej prawdopodobną przyczyną jest to, że lokalizacja Pythona nie znajduje się w zmiennej środowiskowejPATH
systemu. Można to uzyskać, klikając prawym przyciskiem myszy „Mój komputer” i wybierając „Właściwości” lub przechodząc do „Systemu” poprzez „Panel sterowania”. Kliknij „Zaawansowane ustawienia systemu”, a następnie „Zmienne środowiskowe ...”. Zmodyfikuj zmiennąPATH
, aby uwzględnić katalog instalacji Pythona, a także folder Script (zwykleC:\Python27;C:\Python27\Scripts
). Wymaga to uprawnień administracyjnych i może wymagać ponownego uruchomienia.Podczas korzystania z wielu wersji Pythona na tym samym komputerze, możliwym rozwiązaniem jest zmiana nazwy jednego z plików
python.exe
. Na przykład nazwanie jednej wersjipython27.exe
spowoduje, żepython27
stanie się poleceniem Python dla tej wersji.Możesz także użyć programu uruchamiającego Python dla systemu Windows, który jest dostępny za pośrednictwem instalatora i jest domyślnie dostępny. Pozwala wybrać wersję Pythona do uruchomienia przy użyciu
py -[xy]
zamiastpython[xy]
. Możesz użyć najnowszej wersji Python 2, uruchamiając skrypty zpy -2
i najnowszą wersję Python 3, uruchamiając skrypty zpy -3
.
Debian / Ubuntu / MacOS
W tej sekcji założono, że lokalizacja pliku wykonywalnego
python
została dodana do zmiennej środowiskowejPATH
.Jeśli korzystasz z Debian / Ubuntu / MacOS, otwórz terminal i wpisz
python
dla Python 2.x lubpython3
dla Python 3.x.Wpisz,
which python
aby zobaczyć, który interpreter będzie używany.
Arch Linux
Domyślnym Pythonem w Arch Linux (i potomkach) jest Python 3, więc użyj
python
lubpython3
dla Python 3.x ipython2
dla Python 2.x.
Inne systemy
Python 3 jest czasem związana z
python
zamiastpython3
. Aby używać Python 2 w tych systemach, w których jest on zainstalowany, możesz użyćpython2
.
Typy danych
Wbudowane typy
Booleany
bool
: Wartość logiczna True
lub False
. Operacje logiczne, takie jak and
, or
, not
można wykonywać na boolach.
x or y # if x is False then y otherwise x
x and y # if x is False then x otherwise y
not x # if x is True then False, otherwise True
W Python 2.xi Python 3.x wartość logiczna jest również liczbą int
. Typ bool
jest podklasą typu int
a True
i False
to jedyne jego wystąpienia:
issubclass(bool, int) # True
isinstance(True, bool) # True
isinstance(False, bool) # True
Jeśli wartości logiczne są używane w operacjach arytmetycznych, ich wartości całkowite ( 1
i 0
dla True
i False
) zostaną użyte do zwrócenia wyniku liczb całkowitych:
True + False == 1 # 1 + 0 == 1
True * True == 1 # 1 * 1 == 1
Liczby
int
: liczba całkowitaa = 2 b = 100 c = 123456789 d = 38563846326424324
Liczby całkowite w Pythonie mają dowolne rozmiary.
Uwaga: w starszych wersjach Pythona dostępny był
long
typ, który różnił się odint
. Oba zostały zjednoczone.float
: liczba zmiennoprzecinkowa; precyzja zależy od implementacji i architektury systemu, dla CPython typ danych typufloat
odpowiada podwójnemu C.a = 2.0 b = 100.e0 c = 123456789.e1
complex
: liczby zespolonea = 2 + 1j b = 100 + 10j
Operatory <
, <=
, >
i >=
TypeError
wyjątek TypeError
gdy dowolny argument jest liczbą zespoloną.
Smyczki
-
str
: ciąg znaków Unicode . Rodzaj'hello'
-
bytes
: ciąg bajtów . Rodzajb'hello'
-
str
: ciąg bajtów . Rodzaj'hello'
-
bytes
: synonimstr
-
unicode
: ciąg znaków Unicode . Rodzaju'hello'
Sekwencje i kolekcje
Python rozróżnia uporządkowane sekwencje i nieuporządkowane kolekcje (takie jak set
i dict
).
ciągi (
str
,bytes
,unicode
) są sekwencjamireversed
: odwrócona kolejnośćstr
z funkcjąreversed
a = reversed('hello')
tuple
: Uporządkowany zbiórn
wartości dowolnego typu (n >= 0
).a = (1, 2, 3) b = ('a', 1, 'python', (1, 2)) b[2] = 'something else' # returns a TypeError
Obsługuje indeksowanie; niezmienny; hashable, jeśli wszyscy jego członkowie są haszowalni
list
: Uporządkowana kolekcjan
wartości (n >= 0
)a = [1, 2, 3] b = ['a', 1, 'python', (1, 2), [1, 2]] b[2] = 'something else' # allowed
Nie do skrócenia; zmienny.
set
: nieuporządkowany zbiór unikalnych wartości. Przedmioty muszą być haszowalne .a = {1, 2, 'a'}
dict
: nieuporządkowany zbiór unikalnych par klucz-wartość; klucze muszą być haszowalne .a = {1: 'one', 2: 'two'} b = {'a': [1, 2, 3], 'b': 'a string'}
Obiekt jest haszowalny, jeśli ma wartość skrótu, która nigdy się nie zmienia w trakcie jego życia (potrzebuje
__hash__()
), i można go porównać do innych obiektów (potrzebuje__eq__()
). Obiekty haszujące, które porównują równość, muszą mieć tę samą wartość skrótu.
Wbudowane stałe
W połączeniu z wbudowanymi typami danych istnieje niewielka liczba wbudowanych stałych we wbudowanej przestrzeni nazw:
-
True
: prawdziwa wartość wbudowanego typubool
-
False
: Fałszywa wartość wbudowanego typubool
-
None
: obiekt typu singleton używany do sygnalizowania braku wartości. -
Ellipsis
lub...
: używane w rdzeniu Python3 + w dowolnym miejscu i ograniczone użycie w Python2.7 + jako część notacji tablicowej.numpy
i powiązane pakiety używają tego jako odwołania do tablic. -
NotImplemented
: singleton używany do wskazania Pythonowi, że specjalna metoda nie obsługuje określonych argumentów, a Python spróbuje alternatyw, jeśli są dostępne.
a = None # No value will be assigned. Any valid datatype can be assigned later
None
nie ma naturalnego porządku. Korzystanie z operatorów porównania zamówień ( <
, <=
, >=
, >
) nie jest już obsługiwane i spowoduje wystąpienie TypeError
.
None
jest zawsze mniejsza niż dowolna liczba ( None < -32
wartość True
).
Testowanie typu zmiennych
W pythonie możemy sprawdzić typ danych obiektu, używając wbudowanego type
funkcji.
a = '123'
print(type(a))
# Out: <class 'str'>
b = 123
print(type(b))
# Out: <class 'int'>
W instrukcjach warunkowych można przetestować typ danych za pomocą isinstance
. Jednak zwykle nie zaleca się polegania na typie zmiennej.
i = 7
if isinstance(i, int):
i += 1
elif isinstance(i, str):
i = int(i)
i += 1
Aby uzyskać informacje na temat różnic między type()
a isinstance()
przeczytaj: Różnice między isinstance a typem w Pythonie
Aby sprawdzić, czy coś jest typu NoneType
:
x = None
if x is None:
print('Not a surprise, I just defined x as None.')
Konwersja między typami danych
Możesz wykonać jawną konwersję typu danych.
Na przykład „123” jest typu str
i można go przekonwertować na liczbę całkowitą za pomocą funkcji int
.
a = '123'
b = int(a)
Konwersję z ciągu zmiennoprzecinkowego, takiego jak „123.456”, można wykonać za pomocą funkcji float
.
a = '123.456'
b = float(a)
c = int(a) # ValueError: invalid literal for int() with base 10: '123.456'
d = int(b) # 123
Możesz także konwertować typy sekwencji lub kolekcji
a = 'hello'
list(a) # ['h', 'e', 'l', 'l', 'o']
set(a) # {'o', 'e', 'l', 'h'}
tuple(a) # ('h', 'e', 'l', 'l', 'o')
Jawny typ ciągu przy definicji literałów
Za pomocą etykiet z jedną literą przed cudzysłowami możesz określić, jaki typ ciągu chcesz zdefiniować.
-
b'foo bar'
: wynikibytes
w Python 3,str
w Python 2 -
u'foo bar'
: wynikistr
w Pythonie 3,unicode
w Pythonie 2 -
'foo bar'
:str
wyników -
r'foo bar'
: powoduje powstanie tak zwanego surowego ciągu znaków, w którym nie jest konieczne unikanie znaków specjalnych, wszystko jest pisane dosłownie podczas pisania
normal = 'foo\nbar' # foo
# bar
escaped = 'foo\\nbar' # foo\nbar
raw = r'foo\nbar' # foo\nbar
Zmienne i niezmienne typy danych
Obiekt nazywa się mutable, jeśli można go zmienić. Na przykład, gdy przekazujesz listę do jakiejś funkcji, listę można zmienić:
def f(m):
m.append(3) # adds a number to the list. This is a mutation.
x = [1, 2]
f(x)
x == [1, 2] # False now, since an item was added to the list
Obiekt nazywany jest niezmiennym, jeśli nie można go w żaden sposób zmienić. Na przykład liczby całkowite są niezmienne, ponieważ nie ma możliwości ich zmiany:
def bar():
x = (1, 2)
g(x)
x == (1, 2) # Will always be True, since no function can change the object (1, 2)
Należy pamiętać, że same zmienne są zmienne, więc możemy przypisać zmiennej x
, ale nie zmienia to obiekt, który x
wcześniej wskazał. Oznaczało to, że x
wskazuje tylko na nowy obiekt.
Typy danych, których instancje są zmienne, nazywane są zmiennymi typami danych i podobnie dla niezmiennych obiektów i typów danych.
Przykłady niezmiennych typów danych:
-
int
,long
,float
,complex
-
str
-
bytes
-
tuple
-
frozenset
Przykłady zmiennych typów danych:
-
bytearray
-
list
-
set
-
dict
Wbudowane moduły i funkcje
Moduł to plik zawierający definicje i instrukcje w języku Python. Funkcja jest fragmentem kodu, który wykonuje pewną logikę.
>>> pow(2,3) #8
Aby sprawdzić wbudowaną funkcję w pythonie, możemy użyć dir().
Jeśli zostanie wywołany bez argumentu, zwróci nazwy w bieżącym zakresie. W przeciwnym razie zwróć alfabetyczną listę nazw zawierających (niektóre) atrybut danego obiektu i atrybuty, które można z niego uzyskać.
>>> dir(__builtins__)
[
'ArithmeticError',
'AssertionError',
'AttributeError',
'BaseException',
'BufferError',
'BytesWarning',
'DeprecationWarning',
'EOFError',
'Ellipsis',
'EnvironmentError',
'Exception',
'False',
'FloatingPointError',
'FutureWarning',
'GeneratorExit',
'IOError',
'ImportError',
'ImportWarning',
'IndentationError',
'IndexError',
'KeyError',
'KeyboardInterrupt',
'LookupError',
'MemoryError',
'NameError',
'None',
'NotImplemented',
'NotImplementedError',
'OSError',
'OverflowError',
'PendingDeprecationWarning',
'ReferenceError',
'RuntimeError',
'RuntimeWarning',
'StandardError',
'StopIteration',
'SyntaxError',
'SyntaxWarning',
'SystemError',
'SystemExit',
'TabError',
'True',
'TypeError',
'UnboundLocalError',
'UnicodeDecodeError',
'UnicodeEncodeError',
'UnicodeError',
'UnicodeTranslateError',
'UnicodeWarning',
'UserWarning',
'ValueError',
'Warning',
'ZeroDivisionError',
'__debug__',
'__doc__',
'__import__',
'__name__',
'__package__',
'abs',
'all',
'any',
'apply',
'basestring',
'bin',
'bool',
'buffer',
'bytearray',
'bytes',
'callable',
'chr',
'classmethod',
'cmp',
'coerce',
'compile',
'complex',
'copyright',
'credits',
'delattr',
'dict',
'dir',
'divmod',
'enumerate',
'eval',
'execfile',
'exit',
'file',
'filter',
'float',
'format',
'frozenset',
'getattr',
'globals',
'hasattr',
'hash',
'help',
'hex',
'id',
'input',
'int',
'intern',
'isinstance',
'issubclass',
'iter',
'len',
'license',
'list',
'locals',
'long',
'map',
'max',
'memoryview',
'min',
'next',
'object',
'oct',
'open',
'ord',
'pow',
'print',
'property',
'quit',
'range',
'raw_input',
'reduce',
'reload',
'repr',
'reversed',
'round',
'set',
'setattr',
'slice',
'sorted',
'staticmethod',
'str',
'sum',
'super',
'tuple',
'type',
'unichr',
'unicode',
'vars',
'xrange',
'zip'
]
Aby poznać funkcjonalność dowolnej funkcji, możemy skorzystać z wbudowanej help
funkcji.
>>> help(max)
Help on built-in function max in module __builtin__:
max(...)
max(iterable[, key=func]) -> value
max(a, b, c, ...[, key=func]) -> value
With a single iterable argument, return its largest item.
With two or more arguments, return the largest argument.
Wbudowane moduły zawierają dodatkowe funkcje. Na przykład, aby uzyskać pierwiastek kwadratowy z liczby, musimy dołączyć moduł math
.
>>> import math
>>> math.sqrt(16) # 4.0
Aby poznać wszystkie funkcje w module, możemy przypisać listę funkcji do zmiennej, a następnie wydrukować zmienną.
>>> import math
>>> dir(math)
['__doc__', '__name__', '__package__', 'acos', 'acosh',
'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign',
'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1',
'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma',
'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10',
'log1p', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt',
'tan', 'tanh', 'trunc']
wydaje się, że __doc__
jest użyteczny do dostarczenia dokumentacji, powiedzmy, funkcji
>>> math.__doc__
'This module is always available. It provides access to the\nmathematical
functions defined by the C standard.'
Oprócz funkcji dokumentację można również dostarczyć w modułach. Więc jeśli masz plik o nazwie helloWorld.py
taki jak ten:
"""This is the module docstring."""
def sayHello():
"""This is the function docstring."""
return 'Hello World'
Możesz uzyskać dostęp do jego dokumentów w ten sposób:
>>> import helloWorld
>>> helloWorld.__doc__
'This is the module docstring.'
>>> helloWorld.sayHello.__doc__
'This is the function docstring.'
- Dla każdego typu zdefiniowanego przez użytkownika jego atrybuty, atrybuty jego klasy i rekurencyjnie atrybuty klas podstawowych jego klasy można pobrać za pomocą dir ()
>>> class MyClassObject(object):
... pass
...
>>> dir(MyClassObject)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
Dowolny typ danych można po prostu przekonwertować na ciąg znaków za pomocą wbudowanej funkcji o nazwie str
. Ta funkcja jest wywoływana domyślnie, gdy typ danych jest przekazywany do print
>>> str(123) # "123"
Blokuj wcięcia
Python używa wcięć do definiowania konstrukcji sterowania i pętli. Wpływa to na czytelność Pythona, wymaga jednak od programisty zwrócenia szczególnej uwagi na użycie białych znaków. W związku z tym błędna kalibracja edytora może spowodować, że kod zachowa się w nieoczekiwany sposób.
Python używa symbolu okrężnicy ( :
) i wcięcia za pokazanie gdzie bloki kodu rozpoczęcia i zakończenia (Jeśli pochodzą z innego języka, nie należy mylić tego z czym w jakiś sposób związany z operatorem potrójnego ). Oznacza to, że bloki w Pythonie, takie jak funkcje, pętle, if
klauzulami i innymi konstrukcjami, nie mają końcowych identyfikatorów. Wszystkie bloki zaczynają się od dwukropka, a następnie zawierają pod nim wcięte linie.
Na przykład:
def my_function(): # This is a function definition. Note the colon (:)
a = 2 # This line belongs to the function because it's indented
return a # This line also belongs to the same function
print(my_function()) # This line is OUTSIDE the function block
lub
if a > b: # If block starts here
print(a) # This is part of the if block
else: # else must be at the same level as if
print(b) # This line is part of the else block
Bloki zawierające dokładnie jedną instrukcję jednowierszową można umieścić w tym samym wierszu, chociaż ta forma nie jest ogólnie uważana za dobry styl:
if a > b: print(a)
else: print(b)
Próba zrobienia tego z więcej niż jedną instrukcją nie zadziała:
if x > y: y = x
print(y) # IndentationError: unexpected indent
if x > y: while y != z: y -= 1 # SyntaxError: invalid syntax
Pusty blok powoduje błąd IndentationError
. Użyj pass
(polecenie, które nic nie robi), gdy masz blok bez zawartości:
def will_be_implemented_later():
pass
Spacje vs. Tabulatory
W skrócie: zawsze używaj 4 spacji do wcięcia.
Używanie wyłącznie tabulatorów jest możliwe, ale PEP 8 , przewodnik po stylu dla kodu Python, stwierdza, że spacje są preferowane.
Python 3 nie zezwala na łączenie użycia tabulatorów i spacji do wcięć. W takim przypadku generowany jest błąd czasu kompilacji: Inconsistent use of tabs and spaces in indentation
a program nie uruchomi się.
Python 2 umożliwia mieszanie tabulatorów i spacji w wcięciach; jest to zdecydowanie odradzane. Znak tabulacji uzupełnia poprzednie wcięcie i jest wielokrotnością 8 spacji . Ponieważ często zdarza się, że edytory są skonfigurowane do wyświetlania tabulatorów jako wielokrotności 4 spacji, może to powodować subtelne błędy.
Powołując się na PEP 8 :
Podczas wywoływania interpretera wiersza poleceń Python 2 z opcją
-t
wydaje ostrzeżenia o kodzie, który nielegalnie łączy tabulatory i spacje. Podczas używania-tt
te ostrzeżenia stają się błędami. Te opcje są wysoce zalecane!
Wielu redaktorów ma konfigurację „tabulatory do spacji”. Podczas konfigurowania edytora należy rozróżniać znak tabulacji („\ t”) i klawisz Tab .
- Postać zakładka powinna być skonfigurowana, aby pokazać 8 spacji, aby dopasować semantykę języka - przynajmniej w przypadkach, kiedy (przypadkowa) mieszane wcięcia jest możliwe. Redaktorzy mogą także automatycznie konwertować znaki tabulacji na spacje.
- Pomocne może być jednak skonfigurowanie edytora, tak aby naciśnięcie klawisza Tab wstawiło 4 spacje zamiast znaku tabulacji.
Kod źródłowy Pythona napisany z użyciem kombinacji tabulatorów i spacji lub niestandardowej liczby spacji może być zgodny z pep8 przy użyciu autopep8 . (Mniej wydajna alternatywa pochodzi z większością instalacji Pythona: reindent.py )
Rodzaje kolekcji
W Pythonie istnieje wiele typów kolekcji. Podczas gdy typy takie jak int
i str
zawierają jedną wartość, typy kolekcji zawierają wiele wartości.
Listy
Typ list
jest prawdopodobnie najczęściej używanym typem kolekcji w Pythonie. Pomimo nazwy lista jest bardziej podobna do tablicy w innych językach, głównie JavaScript. W Pythonie lista jest jedynie uporządkowanym zbiorem prawidłowych wartości w Pythonie. Listę można utworzyć, umieszczając wartości, oddzielone przecinkami, w nawiasach kwadratowych:
int_list = [1, 2, 3]
string_list = ['abc', 'defghi']
Lista może być pusta:
empty_list = []
Elementy listy nie są ograniczone do jednego typu danych, co ma sens, biorąc pod uwagę, że Python jest językiem dynamicznym:
mixed_list = [1, 'abc', True, 2.34, None]
Lista może zawierać inną listę jako swój element:
nested_list = [['a', 'b', 'c'], [1, 2, 3]]
Do elementów listy można uzyskać dostęp za pomocą indeksu lub numerycznej reprezentacji ich pozycji. Listy w Pythonie są indeksowane zerowo, co oznacza, że pierwszy element na liście ma indeks 0, drugi element ma indeks 1 i tak dalej:
names = ['Alice', 'Bob', 'Craig', 'Diana', 'Eric']
print(names[0]) # Alice
print(names[2]) # Craig
Wskaźniki mogą być również ujemne, co oznacza zliczanie od końca listy ( -1
oznacza indeks ostatniego elementu). Korzystając z listy z powyższego przykładu:
print(names[-1]) # Eric
print(names[-4]) # Bob
Listy są zmienne, więc możesz zmienić wartości na liście:
names[0] = 'Ann'
print(names)
# Outputs ['Ann', 'Bob', 'Craig', 'Diana', 'Eric']
Poza tym możliwe jest dodawanie i / lub usuwanie elementów z listy:
Dołącz obiekt na końcu listy za pomocą L.append(object)
, zwraca None
.
names = ['Alice', 'Bob', 'Craig', 'Diana', 'Eric']
names.append("Sia")
print(names)
# Outputs ['Alice', 'Bob', 'Craig', 'Diana', 'Eric', 'Sia']
Dodaj nowy element do listy pod określonym indeksem. L.insert(index, object)
names.insert(1, "Nikki")
print(names)
# Outputs ['Alice', 'Nikki', 'Bob', 'Craig', 'Diana', 'Eric', 'Sia']
Usuń pierwsze wystąpienie wartości za pomocą L.remove(value)
, zwraca None
names.remove("Bob")
print(names) # Outputs ['Alice', 'Nikki', 'Craig', 'Diana', 'Eric', 'Sia']
Pobierz indeks z listy pierwszego elementu, którego wartość wynosi x. Wyświetli błąd, jeśli nie ma takiego elementu.
name.index("Alice")
0
Policz długość listy
len(names)
6
policz wystąpienie dowolnego elementu na liście
a = [1, 1, 1, 2, 3, 4]
a.count(1)
3
Odwróć listę
a.reverse()
[4, 3, 2, 1, 1, 1]
# or
a[::-1]
[4, 3, 2, 1, 1, 1]
Usuń i zwróć element o indeksie (domyślnie ostatni element) za pomocą L.pop([index])
, zwraca element
names.pop() # Outputs 'Sia'
Możesz iterować elementy listy, takie jak poniżej:
for element in my_list:
print (element)
Krotki
tuple
jest podobna do listy, z tą różnicą, że ma stałą długość i jest niezmienna. Tak więc wartości w krotce nie można zmienić ani dodać ani usunąć wartości z krotki. Krotki są powszechnie używane do małych kolekcji wartości, których nie trzeba zmieniać, takich jak adres IP i port. Krotki są reprezentowane nawiasami zamiast nawiasów kwadratowych:
ip_address = ('10.20.30.40', 8080)
Te same reguły indeksowania list mają również zastosowanie do krotek. Krotki mogą być również zagnieżdżone, a wartości mogą być dowolnymi poprawnymi Pythonami.
Krotka z tylko jednym elementem musi być zdefiniowana w następujący sposób:
one_member_tuple = ('Only member',)
lub
one_member_tuple = 'Only member', # No brackets
lub po prostu używając składni tuple
one_member_tuple = tuple(['Only member'])
Słowniki
dictionary
w Pythonie to zbiór par klucz-wartość. Słownik jest otoczony nawiasami klamrowymi. Każda para jest oddzielona przecinkiem, a klucz i wartość są oddzielone dwukropkiem. Oto przykład:
state_capitals = {
'Arkansas': 'Little Rock',
'Colorado': 'Denver',
'California': 'Sacramento',
'Georgia': 'Atlanta'
}
Aby uzyskać wartość, odwołaj się do niej po jej kluczu:
ca_capital = state_capitals['California']
Możesz również pobrać wszystkie klucze ze słownika, a następnie iterować nad nimi:
for k in state_capitals.keys():
print('{} is the capital of {}'.format(state_capitals[k], k))
Słowniki bardzo przypominają składnię JSON. json
modułu json
w standardowej bibliotece Pythona można używać do konwersji między JSON a słownikami.
zestaw
set
to zbiór elementów bez powtórzeń i bez kolejności wstawiania, ale uporządkowanej. Są używane w sytuacjach, w których ważne jest tylko, że niektóre rzeczy są zgrupowane razem, a nie w jakiej kolejności zostały uwzględnione. W przypadku dużych grup danych znacznie szybciej jest sprawdzić, czy element jest w set
niż zrobić to samo dla list
.
Definiowanie set
jest bardzo podobne do definiowania dictionary
:
first_names = {'Adam', 'Beth', 'Charlie'}
Lub możesz zbudować set
korzystając z istniejącej list
:
my_list = [1,2,3]
my_set = set(my_list)
Sprawdzić przynależność do set
, używając in
:
if name in first_names:
print(name)
Możesz iterować set
dokładnie tak jak listę, ale pamiętaj: wartości będą w dowolnej kolejności zdefiniowanej w implementacji.
defaultdict
defaultdict
to słownik z domyślną wartością dla kluczy, dzięki czemu dostęp do kluczy, dla których nie zdefiniowano żadnej wartości, można uzyskać bez błędów. defaultdict
jest szczególnie użyteczny, gdy wartości w słowniku są kolekcjami (listami, nagraniami itp.) w tym sensie, że nie trzeba go inicjować za każdym razem, gdy używany jest nowy klucz.
defaultdict
nigdy nie zgłosi KeyError. Każdy nieistniejący klucz otrzymuje wartość domyślną.
Weźmy na przykład następujący słownik
>>> state_capitals = {
'Arkansas': 'Little Rock',
'Colorado': 'Denver',
'California': 'Sacramento',
'Georgia': 'Atlanta'
}
Jeśli próbujemy uzyskać dostęp do nieistniejącego klucza, python zwraca nam następujący błąd
>>> state_capitals['Alabama']
Traceback (most recent call last):
File "<ipython-input-61-236329695e6f>", line 1, in <module>
state_capitals['Alabama']
KeyError: 'Alabama'
Spróbujmy z defaultdict
. Można go znaleźć w module kolekcji.
>>> from collections import defaultdict
>>> state_capitals = defaultdict(lambda: 'Boston')
To, co zrobiliśmy tutaj, to ustawienie wartości domyślnej ( Boston ) na wypadek, gdyby klucz dawania nie istniał. Teraz wypełnij dykt tak jak poprzednio:
>>> state_capitals['Arkansas'] = 'Little Rock'
>>> state_capitals['California'] = 'Sacramento'
>>> state_capitals['Colorado'] = 'Denver'
>>> state_capitals['Georgia'] = 'Atlanta'
Jeśli spróbujemy uzyskać dostęp do dykta za pomocą nieistniejącego klucza, Python zwróci nam wartość domyślną, tj. Boston
>>> state_capitals['Alabama']
'Boston'
i zwraca utworzone wartości dla istniejącego klucza, tak jak normalny dictionary
>>> state_capitals['Arkansas']
'Little Rock'
Narzędzie pomocy
Python ma kilka funkcji wbudowanych w interpreter. Jeśli chcesz uzyskać informacje o słowach kluczowych, wbudowanych funkcjach, modułach lub tematach, otwórz konsolę Python i wprowadź:
>>> help()
Otrzymasz informacje, wpisując słowa kluczowe bezpośrednio:
>>> help(help)
lub w ramach narzędzia:
help> help
który pokaże wyjaśnienie:
Help on _Helper in module _sitebuiltins object:
class _Helper(builtins.object)
| Define the builtin 'help'.
|
| This is a wrapper around pydoc.help that provides a helpful message
| when 'help' is typed at the Python interactive prompt.
|
| Calling help() at the Python prompt starts an interactive help session.
| Calling help(thing) prints help for the python object 'thing'.
|
| Methods defined here:
|
| __call__(self, *args, **kwds)
|
| __repr__(self)
|
| ----------------------------------------------------------------------
| Data descriptors defined here:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)
Możesz również poprosić o podklasy modułów:
help(pymysql.connections)
Możesz skorzystać z pomocy, aby uzyskać dostęp do dokumentów różnych zaimportowanych modułów, np. Spróbuj wykonać następujące czynności:
>>> help(math)
i dostaniesz błąd
>>> import math
>>> help(math)
A teraz otrzymasz listę dostępnych metod w module, ale dopiero PO zaimportowaniu go.
Zamknij pomocnika, quit
Tworzenie modułu
Moduł to plik do importu zawierający definicje i instrukcje.
Moduł można utworzyć, tworząc plik .py
.
# hello.py
def say_hello():
print("Hello!")
Funkcje w module można wykorzystać, importując moduł.
W przypadku modułów, które utworzyłeś, muszą one znajdować się w tym samym katalogu, co plik, do którego je importujesz. (Można jednak również umieścić je w katalogu lib Pythona za pomocą wstępnie dołączonych modułów, ale należy tego unikać, jeśli to możliwe).
$ python
>>> import hello
>>> hello.say_hello()
=> "Hello!"
Moduły mogą być importowane przez inne moduły.
# greet.py
import hello
hello.say_hello()
Konkretne funkcje modułu można importować.
# greet.py
from hello import say_hello
say_hello()
Moduły można aliasować.
# greet.py
import hello as ai
ai.say_hello()
Moduł może być samodzielnym skryptem uruchamialnym.
# run_hello.py
if __name__ == '__main__':
from hello import say_hello
say_hello()
Uruchom!
$ python run_hello.py
=> "Hello!"
Jeśli moduł znajduje się w katalogu i musi zostać wykryty przez python, katalog powinien zawierać plik o nazwie __init__.py
.
Funkcja ciągu - str () i repr ()
Istnieją dwie funkcje, których można użyć do uzyskania czytelnej reprezentacji obiektu.
repr(x)
wywołuje x.__repr__()
: reprezentacja x
. eval
zwykle konwertuje wynik tej funkcji z powrotem do oryginalnego obiektu.
str(x)
wywołuje x.__str__()
: czytelny dla człowieka ciąg opisujący obiekt. Może to zawierać pewne szczegóły techniczne.
repr ()
W przypadku wielu typów funkcja ta próbuje zwrócić ciąg znaków, który dałby obiekt o tej samej wartości po przekazaniu do eval()
. W przeciwnym razie reprezentacja jest ciągiem zamkniętym w nawiasach kątowych, który zawiera nazwę typu obiektu wraz z dodatkowymi informacjami. Często obejmuje to nazwę i adres obiektu.
str ()
W przypadku ciągów zwraca to sam ciąg. Różnica między tym a repr(object)
polega na tym, że str(object)
nie zawsze próbuje zwrócić ciąg znaków, który można zaakceptować eval()
. Jego celem jest raczej zwrócenie drukowalnego lub „czytelnego dla człowieka” ciągu. Jeśli nie podano żadnego argumentu, zwraca pusty ciąg ''
.
Przykład 1:
s = """w'o"w"""
repr(s) # Output: '\'w\\\'o"w\''
str(s) # Output: 'w\'o"w'
eval(str(s)) == s # Gives a SyntaxError
eval(repr(s)) == s # Output: True
Przykład 2:
import datetime
today = datetime.datetime.now()
str(today) # Output: '2016-09-15 06:58:46.915000'
repr(today) # Output: 'datetime.datetime(2016, 9, 15, 6, 58, 46, 915000)'
Pisząc klasę, możesz zastąpić te metody, aby zrobić, co chcesz:
class Represent(object):
def __init__(self, x, y):
self.x, self.y = x, y
def __repr__(self):
return "Represent(x={},y=\"{}\")".format(self.x, self.y)
def __str__(self):
return "Representing x as {} and y as {}".format(self.x, self.y)
Korzystając z powyższej klasy możemy zobaczyć wyniki:
r = Represent(1, "Hopper")
print(r) # prints __str__
print(r.__repr__) # prints __repr__: '<bound method Represent.__repr__ of Represent(x=1,y="Hopper")>'
rep = r.__repr__() # sets the execution of __repr__ to a new variable
print(rep) # prints 'Represent(x=1,y="Hopper")'
r2 = eval(rep) # evaluates rep
print(r2) # prints __str__ from new object
print(r2 == r) # prints 'False' because they are different objects
Instalowanie modułów zewnętrznych za pomocą pip
pip
jest Twoim przyjacielem, gdy musisz zainstalować dowolny pakiet z wielu opcji dostępnych w indeksie pakietów Pythona (PyPI). pip
jest już zainstalowany, jeśli używasz Python 2> = 2.7.9 lub Python 3> = 3.4 pobrany z python.org. W przypadku komputerów z systemem Linux lub innym * nix z natywnym menedżerem pakietów, pip
często musi być instalowany ręcznie.
W instancjach, w których zainstalowany jest zarówno Python 2, jak i Python 3, pip
często odnosi się do Python 2, a pip3
do Python 3. Użycie pip
spowoduje zainstalowanie tylko pakietów dla Python 2, a pip3
zainstaluje tylko pakiety dla Python 3.
Znajdowanie / instalowanie pakietu
Wyszukiwanie pakietu jest tak proste, jak pisanie
$ pip search <query>
# Searches for packages whose name or summary contains <query>
Instalowanie pakietu jest tak proste, jak pisanie (w terminalu / wierszu polecenia, a nie w interprecie Pythona)
$ pip install [package_name] # latest version of the package
$ pip install [package_name]==x.x.x # specific version of the package
$ pip install '[package_name]>=x.x.x' # minimum version of the package
gdzie xxx
to numer wersji pakietu, który chcesz zainstalować.
Gdy Twój serwer znajduje się za serwerem proxy, możesz zainstalować pakiet, używając poniższego polecenia:
$ pip --proxy http://<server address>:<port> install
Aktualizacja zainstalowanych pakietów
Gdy pojawią się nowe wersje zainstalowanych pakietów, nie są one automatycznie instalowane w systemie. Aby uzyskać przegląd tego, które z zainstalowanych pakietów stały się nieaktualne, uruchom:
$ pip list --outdated
Aby zaktualizować konkretny pakiet użyj
$ pip install [package_name] --upgrade
Aktualizacja wszystkich nieaktualnych pakietów nie jest standardową funkcjonalnością pip
.
Aktualizacja pip
Możesz zaktualizować istniejącą instalację pip za pomocą następujących poleceń
W systemie Linux lub macOS X:
$ pip install -U pip
W niektórych systemach Linux może być konieczne użycie
sudo
z pipemW systemie Windows:
py -m pip install -U pip
lub
python -m pip install -U pip
Aby uzyskać więcej informacji dotyczących pip, przeczytaj tutaj .
Instalacja Python 2.7.x i 3.x
Uwaga : Poniższe instrukcje są napisane dla Python 2.7 (chyba że podano inaczej): instrukcje dla Python 3.x są podobne.
OKNA
Najpierw pobierz najnowszą wersję Python 2.7 z oficjalnej strony internetowej ( https://www.python.org/downloads/) . Wersja jest dostarczana jako pakiet MSI. Aby zainstalować go ręcznie, wystarczy dwukrotnie kliknąć plik.
Domyślnie Python instaluje się w katalogu:
C:\Python27\
Ostrzeżenie: instalacja nie modyfikuje automatycznie zmiennej środowiskowej PATH.
Zakładając, że instalacja Pythona odbywa się w C: \ Python27, dodaj to do ŚCIEŻKI:
C:\Python27\;C:\Python27\Scripts\
Teraz, aby sprawdzić, czy instalacja w Pythonie jest poprawna, napisz w cmd:
python --version
Python 2.x i 3.x Side-by-Side
Aby zainstalować i używać jednocześnie Python 2.x i 3.x na komputerze z systemem Windows:
Zainstaluj Python 2.x przy użyciu instalatora MSI.
- Upewnij się, że Python jest zainstalowany dla wszystkich użytkowników.
- Opcjonalnie: dodaj Pythona do
PATH
aby Python 2.x był możliwy do wywołania z wiersza poleceń za pomocąpython
.
Zainstaluj Python 3.x za pomocą odpowiedniego instalatora.
- Ponownie upewnij się, że Python jest zainstalowany dla wszystkich użytkowników.
- Opcjonalnie: dodaj Pythona do
PATH
aby Python 3.x był możliwy do wywołania z wiersza poleceń za pomocąpython
. Może to zastąpić ustawieniaPATH
Pythonie 2.x, dlatego dokładnie sprawdźPATH
i upewnij się, że jest skonfigurowany zgodnie z Twoimi preferencjami. - Zainstaluj program
py launcher
dla wszystkich użytkowników.
Python 3 zainstaluje program uruchamiający Python, który może być używany do uruchamiania Python 2.xi Python 3.x zamiennie z wiersza poleceń:
P:\>py -3
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
C:\>py -2
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Aby użyć odpowiedniej wersji pip
dla konkretnej wersji Pythona, użyj:
C:\>py -3 -m pip -V
pip 9.0.1 from C:\Python36\lib\site-packages (python 3.6)
C:\>py -2 -m pip -V
pip 9.0.1 from C:\Python27\lib\site-packages (python 2.7)
LINUX
Najnowsze wersje CentOS, Fedora, Redhat Enterprise (RHEL) i Ubuntu są dostarczane z Python 2.7.
Aby ręcznie zainstalować Python 2.7 na systemie Linux, wykonaj następujące czynności w terminalu:
wget --no-check-certificate https://www.python.org/ftp/python/2.7.X/Python-2.7.X.tgz
tar -xzf Python-2.7.X.tgz
cd Python-2.7.X
./configure
make
sudo make install
Dodaj także ścieżkę nowego pytona do zmiennej środowiskowej PATH. Jeśli nowy python znajduje się w /root/python-2.7.X
uruchom export PATH = $PATH:/root/python-2.7.X
Teraz, aby sprawdzić, czy instalacja w języku Python jest poprawna, wpisz w terminalu:
python --version
Ubuntu (ze źródła)
Jeśli potrzebujesz Python 3.6, możesz go zainstalować ze źródła, jak pokazano poniżej (Ubuntu 16.10 i 17.04 mają wersję 3.6 w uniwersalnym repozytorium). W przypadku Ubuntu 16.04 i niższych wersji należy wykonać następujące kroki:
sudo apt install build-essential checkinstall
sudo apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
tar xvf Python-3.6.1.tar.xz
cd Python-3.6.1/
./configure --enable-optimizations
sudo make altinstall
System operacyjny Mac
Jak mówimy, macOS jest instalowany z Pythonem 2.7.10, ale ta wersja jest przestarzała i nieco zmodyfikowana w stosunku do zwykłego Pythona.
Wersja Pythona dostarczana z systemem OS X jest świetna do nauki, ale nie nadaje się do programowania. Wersja dostarczana z systemem OS X może być nieaktualna w stosunku do oficjalnej bieżącej wersji Pythona, która jest uważana za stabilną wersję produkcyjną. ( źródło )
Zainstaluj Homebrew :
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Zainstaluj Python 2.7:
brew install python
W przypadku Python 3.x zamiast tego użyj polecenia brew install python3
.