1 / 55

Programowanie w językach skryptowych

Programowanie w językach skryptowych. Wykład 2:. Podstawy Pythona. Opracował: Dr inż.. Marcin Janaszewski Katedra Informatyki Stosowanej Politechnika Łódzka. 1. Zawartość wykładu. Komentarze Nadawanie nazw zmiennym Wyrażenia Zmienne Instrukcja print Identyfikator obiektu

cheung
Télécharger la présentation

Programowanie w językach skryptowych

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programowanie w językach skryptowych Wykład 2: Podstawy Pythona Opracował: Dr inż.. Marcin Janaszewski Katedra Informatyki Stosowanej Politechnika Łódzka 1

  2. Zawartość wykładu • Komentarze • Nadawanie nazw zmiennym • Wyrażenia • Zmienne • Instrukcja print • Identyfikator obiektu • Przegląd typów • Operatory logiczne i porównania • Typy liczbowe

  3. Komentarze • Rozpoczynamy znakiem # • Komentarzem jest teks rozciągający się od # do końca wiersza • Komentarz może zajmować cały wiersz • Komentarz może być umieszczony na końcu wiersza • W komentarzach stosowane są wcięcia o tej samej głębokości co opisywany przez nie kod (nieobowiązkowe) • Python nie obsługuje wielowierszowych komentarzy. Każdy komentarz musi mieć własny znak #.

  4. Nadawanie nazw zmiennym • Nazwy nie maja ograniczenia długości • Nazwy rozpoczynają się od litery lub znaku podkreślenia, za którymi może występować dowolna liczba liter, cyfr lub podkreśleń. Przykłady: x, _render, The_Bronx. Nazwy niepoprawne: 100domow, %hash, nowa? • W nazwach wielkość liter jest istotna • Nazwy nie mogą być słowami kluczowymi Pythona Słowa kluczowe: and, assert, break, class, continue, def, del, elif, else, except, exec, finally, for, from, global, if, import, in, is, lambda, not, or, pass, print, raise, return, try, while. Wyświetlanie listy słów kluczowych Pythona: import keyword print keyword.kwlist

  5. Wskazówki dotyczące nadawania nazw Nazwy stosowane w Pythonie zwykle składają się z małych liter a poszczególne słowa tworzące nazwę są oddzielane znakami podkreślenia: liczba_cyfr Należy unikać rozpoczynania nazw zmiennych od znaku podkreślenia, gdyż w ten sposób często zmienne definiowane są przez system.

  6. Wyrażenie Jest dozwoloną kombinacją symboli (zmiennych, literałów, obiektów, funkcji, nawiasów, operatorów itd.), która zwraca obiekt po przetworzeniu w interpreterze Pythona. W wyrażeniu mogą być użyte funkcje i operatory wbudowane lub zdefiniowane samodzielnie przez użytkownika. Wyrażenia są klasyfikowane na podstawie typu zwracanego przez nie obiektu lub działania, które wykonują.

  7. Typy wyrażeń Arytmetyczne – daje w wyniku liczbę Atom – literał, identyfikator, wyświetlanie lub przekształcanie łańcucha: 3.14, x, [1, 2], ‘x’ Odwołanie do atrybutu – atrybut obiektu: obj.attr Logiczne – Działanie logiczne, które w wyniku daje prawdę lub fałsz: a and b, not x. Wywołanie – wywołuje funkcje lub metodę: len(x), a.append(a) Porównanie – Operacja porównania, która daje w wyniku 1 (prawdę) lub 0 (fałsz): a!=0, x<y<z, m is n, s not in t Wyświetlanie – Krotka, lista lub słownik: (1,2), (3,), [1,2], {„a”:1, „b”:2} Lambda – Forma lambda: lambda x: x*x Wycinanie – Zakres pozycji w sekwencji: x[2:4], x[-3:], x[:5] Subskrypcja – pozycja w sekwencji albo słownik: x[0], x[-1], dict[key] Przekształcenie łańcucha – łańcuchowa reprezentacja obiektu: str(x), repr(x), ‘x’

  8. Tworzenie instrukcji z wyrażeń • Jedno wyrażenie lub więcej wyrażeń rozdzielonych przecinkami nazywa się listą wyrażeń. Jeżeli lista wyrażeń zostanie użyta jako instrukcja, a nie wejdzie w skład dłuższej instrukcji, to będzie ona nazywana instrukcją z wyrażenia. • Jeśli lista wyrażeń zawiera wiele instrukcji, to ich wyniki są wyświetlane w postaci krotki (czyli są ujęte w nawiasy) >>> x = 5 >>> s = "skrzynka" >>> lista = [1, 2, 3] >>> s, lista ('skrzynka', [1, 2. 3])

  9. Przypisania wewnątrzwierszowe Można używać wyrażeń jako instrukcji (ale nie odwrotnie!). Python — w odróżnieniu od języka C — nie obsługuje przypisań wewnątrzwierszowych, które są instrukcjami przypisania użytymi jako wyrażenia. if a = 0 # błąd składniowy if a == 0 # poprawnie

  10. Tworzenie zmiennych • Zmienna rozpoczyna swoje istnienie w momencie, gdy po raz pierwszy zostanie jej przypisana wartość za pomocą instrukcji przypisania. Instrukcja ta wiąże nazwę zmiennej z obiektem. Python nie przypisuje zmiennym domyślnych wartości, zatem próba użycia nazwy, która nie została zdefiniowana, kończy się pojawieniem wyjątku >>> x Traceback (most recent call last): File "<stdin>". line 1. in ? NameError: name 'x' is not defined >>> x = 5 >>>x 5

  11. Zmienne • Zmienne w języku Python nie są przyporządkowane poszczególnym typom danych, zatem każda zmienna może reprezentować dowolny obiekt: liczbę, listę itd. Python zachowuje ślad typów danych wewnętrznie. • Zmienne przechowują odwołania do obiektów, które są wskaźnikami do obiektów istniejących w pamięci. >>> s = „tekst" >>> lst = [1, 2, 3] >>> num = 10.5 >>> x = 10 * num >>> tup = ("jeden", "dwa", 3) >>> diet = { 1: "jeden", 2: "dwa" }

  12. Przypisywanie wielu wartości target1, target2,...= expr1, expr2... target1, target2,... to zmienne, którym przypisywane są wartości wyrażeń, expr1 expr2,... odpowiednio. Liczba wyrażeń musi być taka sama jak liczba zmiennych docelowych. target, target2... = seq. target1, target2,... to zmienne, którym przypisywana jest wartość, zaś seq jest sekwencją (łańcuchem, listą lub krotką) z liczbą pozycji równą liczbie zmiennych docelowych. >>> s, lista = "tekst", [1, 2, 3] >>> s 'tekst' >>> lista [1, 2, 3] >>> num, x = 10.5, 10 * num Traceback (most recent call last): File "<stdin>", line 1. in ? NameError: name 'num' is not defined >>> s, t, r = 1, 2, 3, 4 Traceback (most recent call last): File "<stdin>", line 1, in ? ValueError: unpack tuple of wrong size >>> s, t, r = [1, "dwa", 3.0] >>> s, t, r (1, 'dwa‘, 3.0) >>>x, y, z = "ABC" >>>x, y, z ('A‘, 'B‘, 'C') >>> a, b, c, d = range(4) >>> a,b,c,d (0, 1, 2, 3)

  13. Przypisanie wartości wielu zmiennym i zamiana wartości zmiennych target1 = target2 =…= expr >>> x = y = z = 0.0 >>> x,y,z (0.0, 0.0, 0.0) >>> a = b = c = None >>> a,b,c (None, None, None) >>> x = 1 >>> y = 2 >>> x, y = y, x >>> x, y (1, 2)

  14. Usuwanie zmiennych >>> x = y = z = "Python" >>>> x,y,z ('Python', 'Python', ' Python ') >>> del x, y >>> x,y,z Traceback (most recent call last): File "<stdin>". line 1, in ? NameError: name 'x' is not defined >>> dir() #wypisuje wszystkie aktualnie zdefiniowane zmienne [ ‘_builtins_', '_doc_', '_name_', 'z'] Instrukcja del usuwa tylko zmienną, a nie wskazywany przez nią obiekt. Dzieje się tak dlatego, że inne zmienne mogą się odwoływać do tego samego obiektu. Python utrzymuje wewnętrznie ślad obiektu i usuwa obiekt automatycznie, gdy nie jest on już używany.

  15. Instrukcja print print expr1, expr2,… Pobiera ona listę wyrażeń i wykonuje następujące operacje: • oblicza wartość każdego wyrażenia jako obiektu; • przekształca wewnętrznie każdy obiekt na poprawnie sformatowany łańcuch wyjściowy poprzez wywołanie funkcji str() • wpisuje każdy łańcuch wyjściowy do standardowego wyjścia (rozdziela je pojedynczymi spacjami); • dopisuje na końcu danych wyjściowych znak nowego wiersza. >>> print "x" >>> a, b = 5, 10 x >>> print "a" + "b", a + b >>> print "x", "y" ab 15 x, y >>>print "a * b =", a * b >>> "x", "y" a * b = 50 ('x', 'y') >>> print a, "\n\n", b 5 10

  16. Instrukcja print Skrypt: y, z = "xxx", "yyy", "zzz" print x, y, z, 5 * 10 print x, print y, z, print 5 * 10 Wynik: xxx yyy zzz 50 xxx, yyy, zzz, 50 print "x" + 2 #błąd nie można łączyć liczb i łańcuchów print "x" +str(2)

  17. Identyfikator obiektu >>> a ="UFO" >>> b = a >>> print a, b UFO UFO >>> print id(a), id(b) 8253288 8253288 >>> a= "IFO" >>> print a, b IFO UFO >>> print id(a), id(b) 8124672 8253288 >>> a = "UFO" >>> print id(a) 8253288 >>> a = "UFO" >>>id(a) 8253288 >>> id(7 - 7) 7955708 >>> id(None) 504964215 Zmienne odwołujące się do tego samego obiektu nazywa się aliasami, natomiast o obiekcie mówi się, że jest utożsamiany.

  18. Obiekty zmienne i niezmienne Zmiany wprowadzane w jednym aliasie będą widoczne w innych tylko wtedy, gdy utożsamiany obiekt będzie mógł być modyfikowany w miejscu. Operacja przeprowadzana w miejscu zmienia wartość istniejącego obiektu bez tworzenia nowego. Zmiana w miejscu może dotyczyć tylko obiektów zmiennych. Przykładowo liczby i łańcuchy znaków są niezmienne. >>> x = [1, 2, 3] #lista to obiekt zmienny >>> y = x >>> print x, y [1, 2, 3] [1, 2, 3] >>> x[1] = "dwa" >>> print x, y [1, 'dwa', 3] [1, 'dwa', 3] >>> x = [4, 5, 6] >>> print x, y [4, 5, 6] [1. 'dwa' , 3]

  19. Powiązanie zmiennej z istniejącym obiektem >>> a = 0 >>> b = 0 >>> print id(a), id(b) 7955708 7955708 >>> x = [1, 2, 3] >>> y = [1, 2, 3] >>> print id(x), id(y) 8241532 8237044

  20. Określanie typu obiektu Typ obiektu ustala sposób jego wewnętrznej reprezentacji w Pythonie. Typ określa zakres wartości, które może przybierać obiekt oraz operacje, którym obiekt może być poddawany. Obiekty zwykłych liczb całkowitych mogą na przykład reprezentować tylko liczby całkowite od pewnej wartości minimalnej do maksymalnej i obsługiwać operacje arytmetyczne (ale nie operacje łańcuchowe, takie jak na przykład łączenie). Typ obiektu —podobnie jak jego tożsamość (identyfikator) — nie zmienia się przez cały czas jego istnienia. type(expr) >>> x = 123 >>>x = [1, "dwa", 3.0] >>> type(x) >>> type(x) <type 'int' > <type 'list'> >>> x = "poetycki" >>> x = 3.0 >>> type(x) >>> type(x) <type 'string'> <type 'float'>

  21. Sprawdzanie identyczności typów obiektów type(expr1) == type(expr2) >>> a = "Python" >>> b = "Ruby" >>> lista = [1,"dwa", 3.0] >>> type(a) == type(b) 1 >>> type(a) = type(lista) 0 >>> type(a) == type(lista[1]) 1 >> type(a) != type(1) 1 >>> typed(1) = typed(1.0) 0 >>> typed(1) = type("1") 0 >>> type(a) == type(b) != type(lista)

  22. Lista standardowych typów obiektów dir(types)

  23. Lista, Krotka, Słownik Lista – uporządkowana sekwencja obiektów dowolnego typu. Listy można modyfikować, pomniejszać, powiększać lista = [1, "dwa", 3.0] Krotka – niezmienna, uporządkowana sekwencja obiektów różnych typów. krotka = (1, "dwa", 3.0) Słownik – sekwencja obiektów. Każdy obiekt jest osiągalny za pomocą unikalnego identyfikatora zwanego kluczem. Słowniki są zmienne, mogą być powiększane, pomniejszane i modyfikowane. d = {"jeden": "one", "dwa": "two"}

  24. Standardowe nazwy typów BufferType Obiekt bufora zwrócony przez buffer() BuiltinFunctionType Funkcja wbudowana, taka jak na przykład ranget() lub math.sqrt() BuiltinMethodType To samo, co BuiltinFunctionType ClassType Klasa zdefiniowana przez użytkownika CodeType Skompilowany kod bajtowy zwrócony przez compile() ComplexType Liczba zespolona Dicttype Słownik DictionaryType To samo, co DictType - Słownik EllipsisType Obiekt Ellipsis (wielokropki) używany w rozszerzonym wycinaniu FileType Obiekt otwartego pliku, taki jak na przykład sys.stdout FloatType Liczba zmiennoprzecinkowa FrameType Obiekt ramki wykonania FunctionType Funkcje zdefiniowane przez użytkownika i funkcja lambda InstanceType Egzemplarz klasy zdefiniowanej przez użytkownika IntType Liczba całkowita zwykła LambdaType To samo, co FunctionType ListType Lista LongType Liczba całkowita długa MethodType Metoda egzemplarza klasy zdefiniowanej przez użytkownika ModuleType Moduł NoneType Obiekt pusty None SliceType Rozszerzony wycinek zwrócony przez slice() StringType Łańcuch (ciąg znakowy) TracebackType Ślad stosu wyjątku, taki jak na przykład sys.last_traceback TupleType Krotka TypeType Obiekt typu zwrócony przez type UnboundMethodType To samo, co MethodType UnicodeType Łańcuch Unicode XrangeType Zwrócone przez xrange()

  25. Sprawdzanie typu obiektu >>> from types import * >>> x = 1 >>> type(x) == IntType 1 >>> type(1.0) = FloatType 1 >>> type(None) = NoneType 1 >>> type([]) != ListType 0 >>> type(id) == BuiltinFunctionType >>> type(type) == BuiltinFunctionType 1 >>> a = type(" ") >>> type(a) = TypeType 1

  26. Wyrażenia logiczne Mogą przybierać jedną z dwóch wartości: prawda lub fałsz Fałsz w Pythonie: 0, 0.0, 0L, 0 + 0J liczba 0 "" Pusty łańcuch () pusta krotka [] pusta lista {} pusty słownik None pusty obiekt Wyrażenia prawdziwe to takie, których wartości są różne od wymienionych w tabeli.

  27. Operatory logiczne x y x and y x or y not x F F x y 1 T F y x 0 F T x y T T y x >>> not -4 0 >>> not "UFO" 0 >>> not "", not 0, not None (1, 1, 1) >>> not [""], not ({},), not [None] (0, 0, 0)

  28. Uwagi dotyczące operatorów logicznych Wynik wyrażenia logicznego można przypisać do zmiennej: >>>country = s or "Polska" Wielokrotne operacje logiczne: >>> "a" and "b" and [1, 2, 3] # zwraca ostatni obliczony argument [1, 2, 3] >>> "a" and "b" and [] and "c" [] >>> "a" or "b" or [] 'a' >>> 0 or "" or () or [] # zwraca ostatni obliczony argument [] >>> 1 and "a" or "b" 'a' >>> "a" and "" or "b" 'b' Priorytet operacji logicznych: not, and, or

  29. Uwagi dotyczące operatorów logicznych • Jeśli drugi operand w wyrażeniu and lub or jest funkcją lub metodą, to nie będzie ona wywoływana podczas obliczania wartości takiego wyrażenia, jeśli jego wartość da się określić na podstawie pierwszego operandu. • Listy, krotki lub słowniki, które zawierają fałszywe wartości, są traktowane jako prawdziwe. Na przykład lista [""] jest prawdziwa, ponieważ zawiera jedną pozycję. • Egzemplarze klasy domyślnie są prawdziwe, chociaż można im nadać wartość fałszywą za pomocą specjalnej metody _nonzero_()

  30. Operatory porównania Operator Opis < Mniejszy <= Mniejszy lub równy >Większy >= Większy lub równy ==Równy != Nierówny is Tożsamościowa równość obiektu is not Nierówność obiektu in Należy (członkostwo) not in Nie należy Zwracaj liczbę całkowita 0 lub 1

  31. Operatory porównania >>> a = 1 >>> a > 5, 5 > b, b == 10 >>> b = 10 (0, 0, 1) >>> a == b >>> a > 5 > b 0 0 >> a < 5, 5 < b >>> a < 10 == b (1, 1) 1 >>> a < 5 < b >>> (a == 1) and (b >= 5) 1 1 >>> (a != 1) or (b >= 5) 1 Uwaga: Sposób porównywania obiektów zależy od ich typu. Na przykład liczby są porównywane arytmetycznie, a łańcuchy są porównywane na podstawie liczbowych odpowiedników ich znaków. Obiekty różnych typów zawsze są przy porównaniu traktowane jako nierówne, zaś liczby (całkowite, całkowite długie, zmiennoprzecinkowe i zespolone) są przed porównaniem przekształcane do wspólnego typu.

  32. Testy identyczności obiektów >>> a = b = "UFO" >>> a is b 1 >>>lista1 = [1, 2, 3] >>> lista2 = [1, 2, 3] >>> lista1 is lista2 0 >>> lista3 = [lista1,4, 5] >>> lista4 = [-1, 0, lista1] >>> lista3[0] is Iista4[-1] 1 >>> x = None >>> y = None >>> x is y is None 1 Porównanie a is b jest równoważne porównaniu id(a) == id(b).

  33. Operatory in i not in Operatory in i not in służą do określenia tego, czy obiekt należy do danej sekwencji. Sekwencją jest łańcuch, lista lub krotka. >>> lista = [1, "dwa", 3.0, ""] >>> str1 = "" >>> str2 = "dwa" >>> str3 = "ABC" >>> str4 = "ABC\n" >>> 5 in lista, 3 in lista, str2 in lista (0, 1, 1) >>> "" in lista 1 >>> "" in str2 Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: 'in <string>' requires character as a leftoperand >>> "a" not in str3, "A" in str3, "\n" in str4 (1, 1, 1) >>> 3.00 in (1, 2, 3, 4) 1

  34. Porównania kaskadowe x <= y < z jest realizowane: (x <= y) and (y < z) • Porównywane są tylko operandy sąsiadujące ze sobą, zatem w wyrażeniu a < b > ca nie jest porównywane z c. • Porównania kaskadowe mogą mieć dowolną długość, lecz niejawna obecność operatora and oznacza, że obliczenia zatrzymają się natychmiast po stwierdzeniu tego, czy prawdziwość całego wyrażenia może być jednoznacznie określona, >>> d < e < f < g # f i g nie będą obliczane gdy d < e będzie fałszywe

  35. Priorytety operatorów Operator Opis (), [], {}, '' Krotka, lista, słownik, przekształcanie łańcucha x.attr, x[i], x[i-j], f() Atrybut, indeks, wycinanie, wywołanie funkcji +x, -x, ~x Jednostronna identyczność, jednostronne zaprzeczenie, jednostronne odwrócenie bitów ** Podniesienie do potęgi (kojarzone od prawej do lewej) *, /, % Mnożenie, dzielenie, reszta z dzielenia (modulo) + , -Dodawanie, odejmowanie <<, >> Przesunięcie bitowe & Bitowe AND ^ Bitowe XOR | Bitowe OR <, <=, >, >=, ==, !=, Operatory porównania Is, is not, in, not in not Logiczne NOT and Logiczne AND or Logiczne OR lambda Wyrażenie lambda

  36. Kojarzenie operatorów (łączność operatorów) Kojarzenie określa kolejność obliczeń w wyrażeniu wtedy, gdy sąsiednie operatory mają jednakowe pierwszeństwo. W Pythonie jest stosowana zasada kojarzenia od strony lewej do prawej dla wszystkich operatorów oprócz operatora ** (potęgowanie), który jest kojarzony od strony prawej do lewej.

  37. Typy liczbowe Typ Przykłady Liczba całkowita zwykła -10000, 0, 38 Liczba całkowita długa -1L, 0L, 99999999999L Liczba zmiennoprzecinkowa -2.5E4, -1.. 0.0001, 10e2 Liczba zespolona -6+3j, 2.0J, 4.2-5.0J

  38. Błąd zaokrąglenia >>> 0.1 0.10000000000000001 >>> 0.2 0.20000000000000001 >>> 0.3 0.29999999999999999 Występujące tu różnice są spowodowane tym, że Python (podobnie jak inne języki programowania) do wewnętrznej reprezentacji liczb w systemie dziesiętnym używa systemu dwójkowego. Niestety większość ułamków dziesiętnych nie da się dokładnie przedstawić w reprezentacji dwójkowej, zatem występują niewielkie różnice nazywane błędami reprezentacji lub błędami zaokrągleń. Taka sytuacja wynika z zasady działania (i z kompromisu między szybkością a dokładnością) i nie należy jej traktować jako błąd. Python zaokrągla liczby zmiennoprzecinkowe do 17 cyfr znaczących, co stanowi wystarczającą dokładność w większości zastosowań. Jeżeli jest potrzebna podwyższona dokładność, można się posłużyć klasą FixedPoint, którą można pobrać ze strony ftp://ftp.python.org/pub/python/contrib09-Dec-1999/DataStructures/FixedPoint.py.

  39. Uwagi dotyczące pracy z liczbami • Wartości w systemie ósemkowym z zerem na początku: 0871023 • Wartości w systemie szesnastkowym z 0x lub 0X na początku: 0xffff Nie należy rozpoczynać liczby dziesiętnej zerem by Python zinterpretuje ja jako ósemkową. • Aby określić największą dopuszczalną wartość liczby całkowitej: import sys print sys.maxint Największa co do wartości bezwzględnej wartość liczby ujemnej wynosi -maxint-1. • Obliczenia wykorzystujące tylko liczby całkowite są wykonywane znacznie szybciej niż obliczenia z użyciem liczb zmiennoprzecinkowych. W przypadku operacji (takich jak na przykład zliczanie, numerowanie lub indeksowanie) zawsze należy stosować liczby całkowite.

  40. Uwagi dotyczące pracy z liczbami c.d. • Aby wydzielić część rzeczywistą liczby zespolonej z, należy użyć z.real. Część urojona jest zapisywana jako z.imag. • Przy zapisie liczb całkowitych długich należy używać litery L, bowiem mała litera l może być czasem mylona z cyfrą 1. • Odpowiednikiem zwykłych liczb całkowitych jest typ long w języku C, zaś liczb zmiennoprzecinkowych — typ double w języku C.

  41. Uwagi dotyczące pracy z liczbami c.d. • Operacje wykonywane z użyciem zwykłych liczb całkowitych nie dadzą wyniku w postaci liczby długiej, jeśli będzie on za duży, by przechować go jako liczbę całkowitą zwykłą. Trzeba wtedy oznaczyć jeden z operandów jako liczbę długą, w przeciwnym wypadku Python wywoła wyjątek OverflowError. • Perl automatycznie dokonuje przekształcenia łańcuchów na liczby w operacjach arytmetycznych (na przykład 5 + "5" daje w Perlu 10, zaś w Pythonie powoduje powstanie wyjątku TypeError). >>> 123456 * 123456 Traceback (most recent call last): File "<stdin>", line 1. in ? OverflowError: integer multiplication >>> 123456 * 123456L 15241383936L >>> import sys >>> sys.maxint 2147483647

  42. Zasady rozszerzania typów Jeżeli w wyrażeniu arytmetycznym występuje mieszanka typów, Python przekształca wszystkie liczby na najbardziej złożony typ operandu występującego w tym wyrażeniu i zwraca wynik tego właśnie typu. • Jeżeli jeden operand jest liczbą zespoloną, to drugi jest przekształcany na liczbę zespoloną; • w innym wypadku —jeśli jeden operand jest liczbą zmiennoprzecinkową, to drugi jest przekształcany na liczbę zmiennoprzecinkową; • w innym wypadku —jeśli jeden operand jest liczbą całkowitą długą, to drugi jest przekształcany na liczbę całkowitą długą; • w innym wypadku —jeśli obydwa operandy są liczbami całkowitymi zwykłymi, żadne przekształcenie nie jest wymagane.

  43. Funkcja coerce coerce() – pokazuje w jaki sposób Python przekształca liczby coerce(x,y), w którym x i yreprezentują liczby różnych typów. Python zwraca w wyniku dwupozycyjną krotkę zawierającą argumenty przekształcone w wymuszony sposób do wspólnego typu za pomocą reguł podanych na poprzednim slajdzie. Na przykład coerce(1, 2.5) daje w wyniku (1.0, 2.5).

  44. Operatory bitowe i przesunięcia Operator Działanie ~x Odwraca bity w x x<<n Przesuwa x w lewo o n bitów x>>nPrzesuwa x w prawo o n bitów x & y Bitowe AND argumentów x i y x ^ y Bitowe XOR argumentów x i y x | y Bitowe OR argumentów x i y

  45. Operatory przypisania przyrostowego Operator Wartość przypisana do x x+= y x powiększone o y x-= y x zmniejszone o y x*= y x pomnożone przez y x /= y x podzielone przez y x**= y x podniesione do potęgi y x%= yreszta pozostała z dzielenia x / y x|=y x lub bitowe z y x&=y x i bitowe z y x^=y x XOR bitowe z y x>>=y x przesunięte o y bitów w prawo x<<=y x przesunięte o y bitów w lewo Python nie dysponuje operatorami ++, --

  46. x=x+1 czy x+=1? Przypisanie przyrostowe przedstawione w postaci x = x + 1nie jest dokładnie tym, co przypisanie w postaci x += 1. To pierwsze oblicza x dwukrotnie: pierwszy raz podczas wyliczania wartości prawej strony i drugi raz podczas przypisywania wyniku do x umieszczonego po lewej stronie. Drugie przypisanie tylko raz oblicza x w miejscu, co znaczy, że Python oszczędza czas i pamięć, modyfikując jedynie pierwotny obiekt x.

  47. Jawne przekształcanie typów >>> x = "1.5" # łańcuch zmiennoprzecinkowy" >>> float(x), complex(x) (1.5, (1.5+0j)) >>> y = 111222333444555656777888L >>> float(y) # utrata dokładności 1.1122233344455567e+023 >>> oct(256), hex(256) ('0400', '0x100') >>> str(1), str(1.5), str(1/3.3) ('1'. '1.5'. '0.30303030303') >>> float('1.0') 1.0 >>> int('1.0') …ValueError: invalid literal for int() '1.0' int(), long(), float(), complex() >>> x = 0 >>> int(x), long(x), float(x), complex(x) (0, 0L, 0.0, 0j) >>> x = 1 >>> int(x), long(x), float(x), complex(x) (1, 1L, 1.0, (1+0j)) >>> x = 1.5 >>> int(x), long(x), float(x), complex(x) (1, 1L, 1.5, (1.5+0j)) >>> x = "1" # łańcuch całkowitoliczbowy" >>> int(x), long(x), float(x), complex(x) (1, 1L, 1.0, (1+0j))

  48. Funkcje matematyczne w Python abs(x) Wartość bezwzględna x cmp(x,y)-1 dla x < y, 0 dla x==y, 1 dla x > y max(xi, x2...) Największy z argumentów min(xi,x2…) Najmniejszy z argumentów round(x[,n])x zaokrąglone do n cyfr od kropki dziesiętnej >>> round(0.5) 1.0 >>> round(-0.5) -1.0

  49. Przykład >>> stri1= "abcABC" >>> str2 = "xyzXYZ" >>> max(str1), max(str2), max(str1, str2) ('c', 'z', 'xyzXYZ') >>> min(str1), min(str2), min(str1, str2) ('A', 'X', 'abcABC') >>> x = 123456.567 >>> round(x), round(x, 2), round(x, -3) (123457.0, 123456.57000000001, 123000.0) >>> x = -123456.456 >>> round(x), round(x, 2), round(x, -3) (-123456.0, -123456.46000000001, -123000.0) >>> abs(-4), abs,(0.0), abs(99L) (4, 0.0, 99L) >>> cmp(-4, -5), cmp(0, 0.0), cmp(5*2, 5/0.1) (1, 0, -1) >>> max(-4, -5, 0) 0 >>> min(-4, -5, 0) -5 >>> lista1 = [1, 2, 3] >>> lista2 = [4, 5, 6] >>> max(lista1), max(lista2), max(lista1, lista2) (3, 6, [4, 5, 6]) >>> min(lista1), min(lista2), min(lista1, lista2) (1, 4, [1, 2, 3])

  50. moduł math Funkcja Zwraca ceil(x) Zaokrąglenie x w górę (do najbliższej liczby całkowitej, nie mniejszej niż x) exp(x)ex floor(x)Zaokrąglanie, w dół (do najbliższej liczby całkowitej, nie większej od x) log(x)Logarytm naturalny liczby x modf(x)Część całkowita i część ułamkowa x w postaci dwupozycyjnej krotki. sqrt(x) Pierwiastek kwadratowy z x dla x≥0

More Related